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

Mongodb:如何查找字段与ObjectId或字符串匹配的文档?,mongodb,Mongodb,我在Mongodb中收集了一些文档: {_id : ObjectId('533af69b923967ac1801e113'), fKey : '533aeb09ebef89282c6cc478', ... } {_id : ObjectId('5343bd1e2305566008434afc'), fKey : ObjectId('5343bd1e2305566008434afc'), ...} } 正如您所看到的,我的字段fkey可以通过字符串或ObjectId设置 我想获得与“533AEB

我在Mongodb中收集了一些文档:

{_id : ObjectId('533af69b923967ac1801e113'), fKey : '533aeb09ebef89282c6cc478', ... }
{_id : ObjectId('5343bd1e2305566008434afc'), fKey : ObjectId('5343bd1e2305566008434afc'), ...} }
正如您所看到的,我的字段fkey可以通过字符串或ObjectId设置

我想获得与“533AEB09EBEF89282CCC478”或ObjectId“5343bd1e2305566008434afc”匹配的所有文档

但如果我跑步:

db.mycollection.find({fkey : '533aeb09ebef89282c6cc478'})
我只得到收藏的第一份文件

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

谢谢你的帮助


Pierre

这里有两个选项供您选择

您可以使用mongo的:

$or运算符对两个或多个数组执行逻辑or操作,并选择至少满足以下条件之一的文档

您还可以使用:

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


在我看来,这些不一致性似乎不应该存在。我建议您仔细检查代码和数据管道,找出谁/什么在插入具有未知数据类型的fKey值。

这里有两个选项供您选择

您可以使用mongo的:

$or运算符对两个或多个数组执行逻辑or操作,并选择至少满足以下条件之一的文档

您还可以使用:

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


在我看来,这些不一致性似乎不应该存在。我建议您仔细检查代码和数据管道,找出谁/什么在插入具有未知数据类型的fKey值。

谢谢您的回答。我同意你关于数据一致性的看法。为了更方便地请求,我希望Mongodb在请求中添加一个选项或类似的东西,在不检查字段类型的情况下查找。谢谢您的回答。我同意你关于数据一致性的看法。为了更方便地进行请求,我希望Mongodb在请求中添加一个选项或类似的内容,从而在不检查字段类型的情况下查找。。
db.mycollection.find({ 
  $or: [ 
    { fKey: '533aeb09ebef89282c6cc478' }, 
    { fKey: ObjectId( '533aeb09ebef89282c6cc478' ) } 
  ] 
})
db.mycollection.find({ 
  fKey: { 
    "$in": [ '533aeb09ebef89282c6cc478', ObjectId( '533aeb09ebef89282c6cc478' )  ] 
  }
})