如何在 MongoDB C# 驱动程序中按字段值范围 select 文档?

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

我有一个 collection 命名的项目。 Items collection 中的文档有一个名为 "LocationId." How do I select 的字段,并将所有具有与列表、数组等匹配的 LocationId 的 Item 文档带回服务器(无论collection 您更喜欢)位置 ID?

tl:dr 为清楚起见:
1. 有物品 collection.
2. 有 LocationIds 列表,例如服务器上的“1、5、6、12、99”。
3. 需要带回所有在 collection.

中列出了 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数组。

这是使用 builders/filters 的替代方法。

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();