MongoDB - _id的findOne在shell

时间:2017-03-02 21:13:18

标签: mongodb mongodb-query

当我运行一个简单的findOne来获取没有过滤器的文档时,我得到了这个:

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

但是当我将_id作为过滤器反馈时,我得不到任何结果:

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

这是为什么?当我搜索其他字段时,我能够得到一个结果,但使用_id进行搜索不会返回任何内容。

值得注意的是,这些文档包含一个嵌套对象,它有自己的_id。使用此nested._id字段搜索也不会返回任何内容。

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

2 个答案:

答案 0 :(得分:2)

检查MongoDB并确保您的_id字段都是ObjectIds而不是纯字符串。基本上,当您使用自定义ID插入文档时,请确保将对象传递到" _id"领域。对我来说,以下方法可行......

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

和_id的findOne ......

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

答案 1 :(得分:0)

我发现了问题 - 事实证明另一个用户正在运行' remove()'针对集合的命令(我们现在只是在这个集群上测试我们的应用程序)。我相信当我运行已过滤的' findOne()'时,已删除的文件已被删除。最终remove命令完成,集合为空。