如何在MongoDB C#驱动程序中按字段值选择文档?

时间:2015-06-11 00:48:38

标签: c# mongodb mongodb-.net-driver

我有一个名为Items的集合。 Items集合中的文档有一个名为" LocationId的字段。"如何选择并返回到服务器的所有Item文档,其LocationId与列表,数组等(您喜欢的任何集合)匹配的Location Ids?

为了清楚起见,博士:b  1.有物品收集。
 2.有LocationIds列表,例如" 1,5,6,12,99和#34;在服务器上。
 3.需要恢复集合中列出的LocationId的所有Item文档。

3 个答案:

答案 0 :(得分:2)

您可以使用lambda表达式构建简单查询,MongoDB.Driver支持它

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

答案 1 :(得分:0)

我得到了这个解决方案,它适用于较老的驱动程序:

 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;

有趣的是,我不知道&#34;新的BsonValue [] {}&#34;确实。猜猜是bson数组。

答案 2 :(得分:0)

这是使用构建器/过滤器的另一种方法。

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