Mik*_*nes 29 .net c# mongodb mongodb-.net-driver
我已经将documents插入MongoDB而没有id.我想通过搜索默认分配的MongoDBObjectId来检索它们.
这是我的尝试 -
var query_id = Query.EQ("_id", "50ed4e7d5baffd13a44d0153");
var entity = dbCollection.FindOne(query_id);
return entity.ToString();
Run Code Online (Sandbox Code Playgroud)
我得到以下错误 -
发生了'System.NullReferenceException'类型的第一次机会异常
问题是什么?
sou*_*eck 54
您需要创建一个实例,ObjectId然后使用该实例进行查询,否则您的查询会将ObjectIds与string 进行比较,并且无法找到匹配的文档.
这应该工作:
var query_id = Query.EQ("_id", ObjectId.Parse("50ed4e7d5baffd13a44d0153"));
var entity = dbCollection.FindOne(query_id);
return entity.ToString();
Run Code Online (Sandbox Code Playgroud)
Min*_*mal 27
在C#中为最新的官方MongoDB.Driver写这个 -
var filter_id = Builders<MODEL_NAME>.Filter.Eq("id", ObjectId.Parse("50ed4e7d5baffd13a44d0153"));
var entity = dbCollection.Find(filter).FirstOrDefault();
return entity.ToString();
Run Code Online (Sandbox Code Playgroud)
我们可以完成相同的结果,而无需id从字符串转换为ObjectId.但是,我们必须在模型类中添加属性[BsonRepresentation(BsonType.ObjectId)]之前id.
使用lambda表达式甚至可以进一步简化代码-
var entity = dbCollection.Find(document => document.id == "50ed4e7d5baffd13a44d0153").FirstOrDefault();
return entity.ToString();
Run Code Online (Sandbox Code Playgroud)