簡體   English   中英

從ObjectID列表中查找所有MongoDB文檔

[英]Find all MongoDB documents from a list of ObjectIDs

我正在嘗試從MongoDB數據庫中查找所有文檔,該數據庫在我的C#ID列表中具有ObjectID。 這是我正在嘗試的:

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列表進行查找並不可行,因為它需要一個參數。

如何從產品ID列表中查找.Find()所有文檔?

這是強類型的方式。

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;
}

我想出了一個不錯的解決方案。 老實說,我並不是最驕傲的時刻之一:

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

但是, 它有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM