使用'ObjectId'查询MongoDB我想通过搜索默认分配的MongoDBObjectId来检索它们。这是我的尝试-varquery_id=Query.EQ("_id","50ed4e7d5baffd13a44d0153");varentity=dbCollection.FindOne(query_id);返回实体.ToString();我收到以下错误-'System.NullReferenceExceptionhasoccurredWhatistheproblemwithfirstchanceexceptionsoftype'?您需要创建一个ObjectId的实例,然后使用它来查询,否则您的查询会将ObjectId与字符串进行比较,并且找不到匹配的文档。这应该有效:varquery_id=Query.EQ("_id",ObjectId.Parse("50ed4e7d5baffd13a44d0153"));varentity=dbCollection.FindOne(query_id);返回实体.ToString();在C#最新的官方MongoDB.Driver中写这个-varfilter_id=Builders.Filter.Eq("id",ObjectId.Parse("50ed4e7d5baffd13a44d0153"));varentity=dbCollection.Find(filter).FirstOrDefault();返回实体.ToString();无需将id从字符串转换为ObjectId即可获得相同的结果。但是,我们必须在模型类中的id属性之前添加[BsonRepresentation(BsonType.ObjectId)]。使用lambda表达式可以进一步简化代码-varentity=dbCollection.Find(document=>document.id=="50ed4e7d5baffd13a44d0153").FirstOrDefault();返回实体.ToString();所选答案正确。对于任何对Query.EQ感到困惑的人,这是编写基本更新(更新整个mongodb文档)的另一种方法:stringmongoDocumentID="123455666767778";varquery=newQueryDocument("_id",ObjectId.Parse(mongoDocumentID));varupdate=newUpdateDocument{{"$set",documentToSave}};mongoCollection.Update(查询,更新,UpdateFlags.Multi);实际按objectid查找时需要objectId对象,否则会是charstring和objectid类型比较,不匹配。Mongo在这方面非常严格,无论字段名称是否正确。如果你在2018年,并且想要复制/粘贴仍然有效的代码或纯字符串语法;[事实]publicasyncTaskQueryUsingObjectId(){varfilter=Builders.Filter.Eq("_id",newObjectId("5b57516fd16cb04bfc35fcc6"));varentity=stocksCollection.Find(过滤器);varstock=awaitentity.SingleOrDefaultAsync();断言.NotNull(股票);varidString="5b57516fd16cb04bfc35fcc6";varstringFilter="{_id:ObjectId('"+idString+"')}";varentityStringFiltered=stocksCollection.Find(stringFilter);varstockStringFiltered=awaitentityStringFiltered.SingleOrDefaultAsync();Assert.NotNull(stockStringFiltered);你也可以这样做,它是publicstaticObjectIdGetInternalId(stringid){if(!ObjectId.TryParse(id,outObjectIdinternalId))internalId=ObjectId.Empty;返回内部ID;然后在你的方法中你可以做这样的事情ObjectIdinternalId=GetMongoId.GetInternalId(id);返回awaitYourContext.YourTable.Find(c=>c.InternalId==internalId).FirstOrDefaultAsync();注意:GetInternalId中的id参数是该方法的一个参数。以防万一你需要这个:publicasyncTaskFind(stringid){ObjectIdinternalId=GetMongoId.GetInternalId(id);返回awaitYourContext.YourTable.Find(c=>c.InternalId==internalId).FirstOrDefaultAsync();希望它也有帮助。以上就是C#学习教程:使用'ObjectId'查询MongoDB共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
