【问题标题】:Find query in mongodb from specified array从指定数组中查找 mongodb 中的查询
【发布时间】:2016-01-04 11:32:21
【问题描述】:

我在一个 mongo 集合上有两个 JSON 文档

{"_id" : ObjectId("asdf"), "employee" : {"name": "Bob"}}
{"_id" : ObjectId("1234"), "employee" : {"name": "Rob"}}

我只是想做一个简单的查询,从我的数组中获取员工的姓名。

我试过了

db.myCollection.find({"employee.name": "Bob"})

此方法有效且仅返回 1 个文档。

db.myCollection.find({"employee.name": ["Bob", "Rob"]})

不起作用。不返回任何东西

db.myCollection.find({"employee.name": "Bob", "Rob"})

语法错误

db.myCollection.find({"employee.name": {$all : ["Bob", "Rob"]} })

不起作用。不返回任何东西

我知道这是一个非常简单的查询。但无法弄清楚语法。

【问题讨论】:

    标签: arrays mongodb find


    【解决方案1】:

    尝试使用$in 运算符

    查询db.myCollection.find({"employee.name": { $in: ["Bob", "Rob"] }})

    对于您尝试过的选项,

    db.myCollection.find({"employee.name": "Bob"})
    

    这将返回名称为“Bob”的记录,这就是它只返回一条记录的原因。

    db.myCollection.find({"employee.name": ["Bob", "Rob"]})
    

    对于这个选项,我们提供了 ["Bob", "Rob"] 来匹配值,实际上是和数组,所以它会返回名称相同的数组的记录。

    db.myCollection.find({"employee.name": "Bob", "Rob"})
    

    对于这个选项,正如 Jaco 所说,它不是有效的 json 格式。

    db.myCollection.find({"employee.name": {$all : ["Bob", "Rob"]} })
    

    此选项将尝试查找具有 name 字段值的记录作为数组,使得 value 数组包含 $all 中提供的所有值

    【讨论】:

      【解决方案2】:

      您需要使用$in 运算符,请参阅documentation

      db.myCollection.find({"employee.name":{$in:["Bob","Rob"]}} )
      

      $all 运算符不返回任何文档,因为它选择字段值是包含所有指定元素的数组的文档。以下记录将满足此条件:

      {"_id" : ObjectId("asdf"), "employee" : {"name": ["Bob","Rob"]}}
      

      此查询也将返回上述记录:

      db.myCollection.find({"employee.name": ["Bob", "Rob"]})
      

      最后,下面的查询抛出一个无效的语法错误,因为{"employee.name": "Bob", "Rob"} 不是有效的 JSON\BSON 文档:

      db.myCollection.find({"employee.name": "Bob", "Rob"})
      

      【讨论】:

      • 像魅力一样工作:)
      【解决方案3】:

      根据上述描述作为替代解决方案,请尝试执行以下查询,假设需要获取所有文档

      db.getCollection('myCollection').find({},{_id:0,'employee.name':1})

      上述查询利用投影文档从集合中获取所有文档以检索结果集中的特定字段

      有关 MongoDB 投影文档的更详细说明,请参阅以下 URL 中提到的以下文档

      https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-05
        • 2020-09-14
        相关资源
        最近更新 更多