当我运行一个简单的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个成员,一切看起来都很健康。
答案 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命令完成,集合为空。