マイDocumentDB SP
:DocumentDB SP
function getSetOfProductDetails(productIds) {
var collection = getContext().getCollection();
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
"SELECT * FROM product WHERE product.productId IN ("+ productIds +")" ,
function (err, feed, options) {
if (err) throw err;
// Check the feed and if empty, set the body to 'no docs found',
// else take 1st element from feed
if (feed) getContext().getResponse().setBody(feed);
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
私のC#コード:
string productIdList = "'271762','288738','235521','266714'";
List<Product> productList = new List<Product>();
try
{
productList = await DocumentDBRepository<List<Product>>.ExecuteStoredProc("product","getSetOfProductDetails", productIdList);
}
DocumentDBRepositoryコード:
public static async Task<T> ExecuteStoredProc(string collectionId, string storedProcedureId, params object[] parameter)
{
ConnectToDatabase();
StoredProcedureResponse<T> document = await _documentClient.ExecuteStoredProcedureAsync<T>(UriFactory.CreateStoredProcedureUri(_databaseId, collectionId, storedProcedureId), parameter);
return (T)(dynamic)document;
}
私はproductList
で受け取る結果セットは一方で、空白でありますCollection
には文書があります。これはDocumentDB
のIN
ステートメントを実装する正しい方法ですか?
私はproductIds配列をシリアル化する方法に問題があると推測しています。 JSON.stingify(productIds)を試すことができますが、まずはqueryDocuments呼び出しの外にSQL文を作成し、SQL文の作成時に直列化の設定方法を確認します。 –
そのままの状態でSQL文を返すことができます –