我有这样的文件:
/* 1 */
{
"_id" : ObjectId("573f3944a75c951d4d6aa65e"),
"Source" : "IGN",
"Country" : "US"
}
/* 2 */
{
"_id" : ObjectId("573f3d41a75c951d4d6aa65f"),
"Source" : "VG",
"Country" : "Norway"
}
/* 3 */
{
"_id" : ObjectId("573f4367a75c951d4d6aa660"),
"Source" : "NRK",
"Country" : "Norway"
}
/* 4 */
{
"_id" : ObjectId("573f4571a75c951d4d6aa661"),
"Source" : "VG",
"Country" : "Norway"
}
/* 5 */
{
"_id" : ObjectId("573f468da75c951d4d6aa662"),
"Source" : "IGN",
"Country" : "US"
}
这样的来源列表:
list = ['VG', 'IGN']
我想只返回源等于' IGN'或者' VG' (列表中的任何元素)
如何使用官方C#mongodb驱动程序执行此操作?
答案 0 :(得分:4)
假设您使用的是MongoDB C#驱动程序2.2版,则可以使用FilterDefinitionBuilder类来过滤掉所需的结果。
using System.Collections.Generic;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver;
... Your class and method declaration ...
IMongoClient client = new MongoClient ("mongodb://localhost:27017/test");
IMongoDatabase database = client.GetDatabase("test");
IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument> ("collection");
var filter = Builders<BsonDocument>.Filter.AnyIn ("Source", new[]{"VG", "IGN"});
var cursor = await collection.FindAsync (filter);
var docs = cursor.ToList();
docs
只会保留那些source
VG
或IGN.
的文档。根据您的示例数据,它将包含4个文档。
答案 1 :(得分:0)
有点晚了,但我和 OP 有同样的问题,实际上接受的答案是错误的。如果您的数据库对象本身包含您要搜索的数组,则 AnyIn 是正确的过滤器。 在 OP 的(以及我的)案例中,简单的 In 过滤器是正确使用的过滤器:
var filter = Builders<BsonDocument>.Filter.In("Source", new[]{"VG", "IGN"});
或使用 lambda
var filter = Builders<BsonDocument>.Filter.In(o => o.Source, new[]{"VG", "IGN"});