[英]How do I write a multikey query in MongoDb and C#?
在我們的Mongo數據庫中,我們有一個由“StoreId”和“ItemId”索引的集合。 以下查詢將返回“In”列表中包含的所有產品存儲組合(總共9個文檔)。
var productQuery = Query.In("ItemId", new BsonArray(new List<int> {1, 2, 3}));
var storeQuery = Query.In("StoreId", new BsonArray(new List<int> {1, 2, 3}));
var queryToBringNineDocuments = Query.And(productQuery, storeQuery);
如何編寫一個查詢,將帶有鍵的文檔帶回到以下項目存儲元組列表中?
var neededProductStores = new List<Tuple<int, int>>
{
new Tuple<int, int>(1, 2),
new Tuple<int, int>(1, 3),
new Tuple<int, int>(2, 1),
new Tuple<int, int>(3, 2)
};
var queryToBringFourDocuments = ?;
在我看來,目前只有一種方法 - 創建額外的字段,其中包含id和查詢
因此,在您存儲到數據庫的c#類中,您可以:
public string ProductStoreId
{
get
{
return string.Format("{0}_{1}",ItemId, StoreId);
}
set { } //empty set means that it will be stored to database
}
那么你的查詢將是:
var query = Query.In("ProductStoreId", new BsonArray(new List<string> {"1_2", "1_3",.. }));
這也可以通過累積AND查詢的OR查詢來完成。 如果你有很多組合,它可能會變得非常難看。
var neededProductStores = new List<Tuple<int, int>>
{
new Tuple<int, int>(1, 2),
new Tuple<int, int>(1, 3),
new Tuple<int, int>(2, 1),
new Tuple<int, int>(3, 2)
};
IMongoQuery[] queries =(from t in neededProductStores
select Query.And(Query.EQ("ItemId", t.Item1), Query.EQ("StoreId", t.Item2))).ToArray<IMongoQuery>();
var queryToBringFourDocuments = Query.Or(queries);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.