C#MongoDB匹配数组中的任何元素

时间:2016-05-28 20:12:10

标签: c# mongodb

我有这样的文件:

/* 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驱动程序执行此操作?

2 个答案:

答案 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 VGIGN.的文档。根据您的示例数据,它将包含4个文档。

我建议您查看如何Find or Query Data with C# Driver

答案 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"});