从指定数组中查找 mongodb 中的查询

Find query in mongodb from specified array

我在 mongo collection

上有两个 JSON 文档
{"_id" : ObjectId("asdf"), "employee" : {"name": "Bob"}}
{"_id" : ObjectId("1234"), "employee" : {"name": "Rob"}}

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

我试过了

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

这行得通,return只有 1 个文档。

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

无效。什么都没有return

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

语法错误

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

无效。什么都没有return

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

尝试使用 $in 运算符

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

对于您尝试过的选项,

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

This will return the records with name having "Bob", so that is why it is returning only one record.

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

For this option we have provided ["Bob", "Rob"] for matching value, which actually is and array, so it will return records with same array in name.

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

For this option, as Jaco said it is not a valid json format.

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

This option will try to find records with value of name field as an array such that the value array contains all the values provided in $all

需要使用$in运算符,见documentation

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

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

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

以上记录也将被此查询return编辑:

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

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

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

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

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

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

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

中提到的文档

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