簡體   English   中英

如何在MongoDb和C#中編寫多鍵查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM