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

Pie*_*oux 0 mongodb

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

{_id : ObjectId('533af69b923967ac1801e113'), fKey : '533aeb09ebef89282c6cc478', ... }
{_id : ObjectId('5343bd1e2305566008434afc'), fKey : ObjectId('5343bd1e2305566008434afc'), ...} }
Run Code Online (Sandbox Code Playgroud)

如您所见,我的字段fkey可以由字符串ObjectId设置

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

但是如果我跑:

db.mycollection.find({fkey : '533aeb09ebef89282c6cc478'})
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助。

皮埃尔

Lix*_*Lix 5

这里有两个选项供您选择。

您可以使用mongo的$or运算符

db.mycollection.find({ 
  $or: [ 
    { fKey: '533aeb09ebef89282c6cc478' }, 
    { fKey: ObjectId( '533aeb09ebef89282c6cc478' ) } 
  ] 
})
Run Code Online (Sandbox Code Playgroud)

$or操作者执行的逻辑OR的两个或更多的阵列上操作<expressions>和文件选择该的至少满足一个<expressions>


您还可以使用$in运算符

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

$in操作者选择其中一个场的值等于指定数组中的任何值的文件。


在我看来,这些不一致并不是要存在的。我建议您遍历您的代码和数据管道,并弄清楚谁/什么将fKey使用未知数据类型插入值。