簡體   English   中英

如何在 MongoDB C# 驅動程序中按字段值范圍選擇文檔?

[英]How to select documents by field range of values in MongoDB C# driver?

我有一個名為 Items 的集合。 Items 集合中的文檔有一個名為“LocationId”的字段。 如何選擇所有具有與位置 ID 的列表、數組等(您喜歡的任何集合)匹配的 LocationId 的 Item 文檔並將其帶回服務器?

tl:dr 為清楚起見:
1.有物品收藏。
2. 在服務器上有 LocationIds 列表,例如“1, 5, 6, 12, 99”。
3. 需要帶回集合中列出了 LocationId 的所有 Item 文檔。

您可以使用 lambda 表達式構建簡單的查詢,MongoDB.Driver 支持它

var collection = database.GetCollection<Item>("Item");
var list = await collection.Find(x => locationIds.Contains(x.LocationId)).ToListAsync();

我得到了這個解決方案,它適用於較舊的驅動程序:

 var locations = new BsonValue[] { 1, 2, 3, 4 };
 var collection = database.GetCollection<Item>("Item");
 var data = collection
            .Find(Builders<BsonDocument>.Filter.In("LocationId", locations))
            .Project(x => Mapper.Map<BsonDocument, ItemViewModel>(x))
            .ToListAsync().Result;

有趣的是,我不知道“new BsonValue[]{}”是做什么的。 猜猜是bson數組。

這是使用構建器/過濾器的另一種方法。

var ids = new List<Int32> { 1, 2, 3, 4, 5, 6 };
var filter = Builders<Item>.Filter.AnyIn("LocationId", ids);
var collection = database.GetCollection<Item>("Item");
var results = await collection.FindAsync(filter);

var locations = await results.ToListAsync();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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