Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ObjectID列表中查找所有MongoDB文档_C#_Mongodb - Fatal编程技术网

C# 从ObjectID列表中查找所有MongoDB文档

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("

我正在尝试从MongoDB数据库中查找所有文档,该数据库的ObjectID来自我的ID列表,带有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;
}
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“类型,因为它不是委托类型。不用担心,您的解决方案工作得很好!谢谢。