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



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

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

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

我想获取与"533aeb09ebef89282c6cc478"或 ObjectId('5343bd1e2305566008434afc'(匹配的所有文档。

但是如果我运行:

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

我只得到集合的第一个文档。

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

感谢您的帮助。

皮尔

这里有两个选项。

你可以使用 mongo 的$or运算符:

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

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


您还可以使用 $in 运算符:

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

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


在我看来,这些不一致并不意味着存在。我建议浏览您的代码和数据管道,并找出谁/什么在插入具有未知数据类型的fKey值。

最新更新