【问题标题】:Mongodb : How to find documents in which fields match an ObjectId or a string?Mongodb:如何查找字段与 ObjectId 或字符串匹配的文档?
【发布时间】:2014-04-22 10:18:54
【问题描述】:

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

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

如您所见,我的字段 fkey 可以由 stringObjectId 设置。

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

但是如果我运行:

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

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

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

感谢您的帮助。

皮埃尔

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    这里有两种选择。

    你可以使用 mongo 的$or operator:

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

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


    您也可以使用$in operator:

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

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


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

    【讨论】:

    • 感谢您的回答。我同意你关于数据一致性的观点。为了更容易请求,我希望 Mongodb 通过在请求中添加一个选项或类似的东西来查找而不检查字段类型..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2020-03-22
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多