Mongodb:如何查找字段与ObjectId或字符串匹配的文档?

时间:2014-04-22 10:18:55

标签: mongodb

我在Mongodb的一个集合中有一些文档:

{_id : ObjectId('533af69b923967ac1801e113'), fKey : '533aeb09ebef89282c6cc478', ... }
{_id : ObjectId('5343bd1e2305566008434afc'), fKey : ObjectId('5343bd1e2305566008434afc'), ...} }

正如您所见,我的字段 fkey 可以通过字符串 ObjectId 设置。

我想获得所有符合'533aeb09ebef89282c6cc478'或ObjectId('5343bd1e2305566008434afc')的文件。

但如果我跑:

db.mycollection.find({fkey : '533aeb09ebef89282c6cc478'})

我只收到该集合的第一份文件。

有没有办法配置Mongodb以获取与请求匹配的所有文档而不检查类型?

感谢您的帮助。

皮尔

1 个答案:

答案 0 :(得分:5)

这里有两种选择。

你可以使用mongo的$or operator

db.mycollection.find({ 
  $or: [ 
    { fKey: '533aeb09ebef89282c6cc478' }, 
    { fKey: ObjectId( '533aeb09ebef89282c6cc478' ) } 
  ] 
})
  

$or运算符对两个或更多OR的数组执行逻辑<expressions>运算,并选择至少满足<expressions>之一的文档。


您也可以使用$in operator

db.mycollection.find({ 
  fKey: { 
    "$in": [ '533aeb09ebef89282c6cc478', ObjectId( '533aeb09ebef89282c6cc478' )  ] 
  }
})
  

$in运算符选择字段值等于指定数组中任何值的文档。


听起来我觉得这些不一致并不意味着存在。我建议您浏览代码和数据管道,找出使用未知数据类型插入fKey值的人/内容。