从ObjectID列表

时间:2017-12-31 02:21:58

标签: c# mongodb

我正在尝试从MongoDB数据库中查找所有文档,该数据库具有来自我的ID列表中的ObjectID和C#。这是我正在尝试的内容:

public IEnumerable<Product> GetFromIDs(List<string> productIDs)
{
    var client = new MongoClient(new MongoUrl("mongodb://localhost:27017"));
    var db = client.GetDatabase("Database");
    var products = db.GetCollection<Product>("Products")
        .Find(x => x._id == productIDs)
        .ToEnumerable();
    return products;
}

productIDs只是MongoDB数据库中的ObjectID列表。显然,尝试通过ID列表查找并不是那样工作的,因为它只需要一个参数。

如何.Find()我的产品ID列表中的所有文件?

2 个答案:

答案 0 :(得分:3)

这是一种强类型的方式。

public IEnumerable<Product> GetFromIDs(List<string> productIDs)
{
    var client = new MongoClient(new MongoUrl("mongodb://localhost:27017"));
    var db = client.GetDatabase("Database");
    var productsCollection = db.GetCollection<Product>("Products");

    var productObjectIDs = productIDs.Select(id => new ObjectId(id));

    var filter = Builders<Product>.Filter
        .In(p => p.Id, productObjectIDs);

    var products = productsCollection
        .Find(filter)
        .ToEnumerable();

    return products;
}

答案 1 :(得分:1)

我想出了一个非常糟糕的解决方案。说实话,这不是我最骄傲的时刻之一:

ObjectId[] allIDs = new ObjectId[productIDs.Count];

for(var i = 0; i < productIDs.Count; i++)
{
    allIDs[i] = new ObjectId(productIDs[i]);
}

var filter = new BsonDocument("_id", new BsonDocument("$in", new BsonArray(allIDs)));
var products = db.GetCollection<Product>("Products").Find(filter).ToEnumerable();

但是嘿,可行