C# 从ObjectID列表中查找所有MongoDB文档
我正在尝试从MongoDB数据库中查找所有文档,该数据库的ObjectID来自我的ID列表,带有C#。以下是我正在尝试的:C# 从ObjectID列表中查找所有MongoDB文档,c#,mongodb,C#,Mongodb,我正在尝试从MongoDB数据库中查找所有文档,该数据库的ObjectID来自我的ID列表,带有C#。以下是我正在尝试的: public IEnumerable<Product> GetFromIDs(List<string> productIDs) { var client = new MongoClient(new MongoUrl("mongodb://localhost:27017")); var db = client.GetDatabase("
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;
}
public IEnumerable GetFromId(列出产品ID)
{
var客户端=新MongoClient(新MongoUrl(“mongodb://localhost:27017"));
var db=client.GetDatabase(“数据库”);
var products=db.GetCollection(“产品”)
.Find(x=>x.。\u id==productid)
.ToEnumerable();
退货产品;
}
productId
只是来自MongoDB数据库的ObjectId列表。显然,试图通过ID列表进行查找是不可行的,因为它只需要一个参数
我如何
.Find()
从我的产品ID列表中查找所有文档?我想出了一个非常简单的解决方案。老实说,这不是我最自豪的时刻:
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();
ObjectId[]allIDs=newobjectid[productid.Count];
对于(var i=0;i
但是,嘿,它能工作我想出了一个相当棘手的解决方案。老实说,这不是我最自豪的时刻:
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();
ObjectId[]allIDs=newobjectid[productid.Count];
对于(var i=0;i
但是,嘿,它是有效的这是强类型方式
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;
}
public IEnumerable GetFromId(列出产品ID)
{
var客户端=新MongoClient(新MongoUrl(“mongodb://localhost:27017"));
var db=client.GetDatabase(“数据库”);
var productsCollection=db.GetCollection(“产品”);
var productObjectIDs=productIDs.Select(id=>newobjectid(id));
var filter=Builders.filter
.In(p=>p.Id,ProductObjectId);
var产品=产品集合
.查找(筛选器)
.ToEnumerable();
退货产品;
}
这是强类型方式
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;
}
public IEnumerable GetFromId(列出产品ID)
{
var客户端=新MongoClient(新MongoUrl(“mongodb://localhost:27017"));
var db=client.GetDatabase(“数据库”);
var productsCollection=db.GetCollection(“产品”);
var productObjectIDs=productIDs.Select(id=>newobjectid(id));
var filter=Builders.filter
.In(p=>p.Id,ProductObjectId);
var产品=产品集合
.查找(筛选器)
.ToEnumerable();
退货产品;
}
不知道C#但是如果我们有这样的列表,在mongo shell中我会尝试$in。@Avij使用$in
确实有效,但我真的不知道如何正确操作。我现在正在尝试这个,但它没有返回任何值,因为它们是字符串而不是objectID:var filter=new BsonDocument(“\u id”,new BsonDocument(“$in”,new BsonArray(productid))
不知道C;但是如果我们有这样的列表,在mongo shell中我会尝试$in。@Avij使用$in
确实有效,但我真的不知道如何正确地做。我现在正在尝试,但它没有返回任何值,因为它们是字符串而不是objectID:var filter=new BsonDocument(“\u id”,new BsonDocument($in),new BsonArray(productid))
问题是,解析到GetFromIDs
的列表类型是string
,而Product
上的Id
类型为ObjectId
。因此,我得到一个“无法将lambda表达式转换为”FieldDefinition“类型,因为它不是委托类型。不用担心,您的解决方案工作得很好!非常感谢。问题是,解析到GetFromIDs
的列表类型为string
,而Product
上的Id
类型为ObjectId
。因此,我得到一个“无法将lambda表达式转换为”FieldDefinition“类型,因为它不是委托类型。不用担心,您的解决方案工作得很好!谢谢。