2016-01-04 22 views
1

我有一个蒙戈集合查找查询从指定数组

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

所有我只想做一个简单的查询从我的阵列员工的名称的两个JSON文档。

我试图

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"]} }) 

不工作。不返回任何东西

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

回答

1

提供的所有值运营商,请参阅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"}) 
+0

工作就像魅力:) –

2

尝试使用$in操作

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

对于您所尝试的选项,

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

这将有 “鲍勃” 的名字返回的记录,使这就是为什么它只返回一条记录。

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

为我们提供了这个选项[“鲍勃”,“抢”]匹配值,这实际上是和数组,所以它会返回记录与名称相同的阵列。

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

对于此选项,因为雅科说,这不是一个有效的JSON格式。

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

此选项将尝试找到名称字段的值的记录作为数组使得价值数组包含您需要使用$in$all

0

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

db.getCollection( 'MyCollection的')找到({},{_ ID:0, 'employee.name':1})。

上面的查询获取所有的文件从收集利用投影文件检索关于MongoDB的投影文件中的ResultSet

特定领域的更多详细应将描述请参见下面的文档,如下面的URL

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

提到