MongoDB - 在 shell 中按 _id 查找 findOne 返回 null

3
当我运行一个简单的findOne来获取没有过滤器的文档时,我会得到这样的结果:
mongos> db.mycollection.findOne({},{_id:1})
{ "_id" : "1d0eb04fd0325cd79e4f8dc24268c6ad2205082199957ce42ffb9e802eec73c9" }

但是当我将该 _id 作为过滤器输入时,我没有得到任何结果:

mongos> db.mycollection.findOne({ "_id" : "1d0eb04fd0325cd79e4f8dc24268c6ad2205082199957ce42ffb9e802eec73c9" } )
null

为什么会这样呢?当我在其他字段上搜索时,我能够得到结果,但是使用_id搜索却没有返回任何结果。

需要注意的是,这些文档包括一个带有自己的_id的嵌套对象。使用这个nested._id字段进行搜索也没有返回任何结果。

我的环境:运行在Centos 7上的2个分片mongoDB 3.4。每个副本集都有3个成员,一切看起来都很健康。

2个回答

5

检查MongoDB,确保您的_id字段都是ObjectId而不是普通字符串。基本上,当您插入带有自定义ID的文档时,请确保将对象传递到“_id”字段中。对我来说,以下内容可行...

mongos> db.mycollection.findOne({},{_id:1})
{ "_id" : ObjectId("1d0eb04fd0325cd79e4f8dc24268c6ad2205082199957ce42ffb9e802eec73c9") }

以 _id 查找一条记录 ...

mongos> db.mycollection.findOne({ "_id" : ObjectId("1d0eb04fd0325cd79e4f8dc24268c6ad2205082199957ce42ffb9e802eec73c9") } )
{ "_id" : ObjectId("1d0eb04fd0325cd79e4f8dc24268c6ad2205082199957ce42ffb9e802eec73c9"), "blahh" : "val"}

只是想评论一下,我很傻,我在use db_name命令之后输入了db.mydbname.findOne,而应该输入db.mycollection.findOne。有时候我真不知道自己怎么会这样。谢谢你的回答! - Shrout1

0

我找到了问题所在- 原来是另一个用户正在对集合运行 'remove()' 命令(我们目前只是在这个集群上测试我们的应用程序)。我相信在我运行过滤的 'findOne()' 时,被返回的文档已经被删除了。最终,删除命令完成后,集合变为空了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接