Mongodb:如何执行子查询?

我有文件进一步有arrays。 我想要查询作为以前的查询结果返回的数组。 比如我有

{ {_id : 001, data: [{ value: 1, name: 'Roger' }, {value: 2, name: 'Albert' }, {value: 3, name: 'Allen' }] }, {_id: 002, data: [{value: 4, name: 'Allison' }, {value: 5, name: 'Tom' }] } } 

我可以得到的文件_id等于001,但我想查询它的数据字段中的值等于2和3.我不知道这是什么解决scheme。 在SQL它可以执行子查询,但我不知道如何在MongoDB中做到这一点。

也许你应该使用$ elemMatch: http ://docs.mongodb.org/manual/reference/operator/query/elemMatch/

一个很好的例子: http : //docs.mongodb.org/manual/reference/operator/query/all/

 1.db.test.save({d: [{k1:1, v1:1}]}) 2.db.test.save({d: [{k1:1, v1:1}]}) 3.db.test.find({d:{$elemMatch:{k1:1}}}) 

返回:

 { "_id" : ObjectId("52aea61c54125a39453c8836"), "d" : [ { "k1" : 1, "v1" : 1 } ] } { "_id" : ObjectId("52aea62054125a39453c8837"), "d" : [ { "k1" : 1, "v1" : 1 } ] } 

请注意,$ elemMatch查询不同于$ elemMatch投影。

在2个不同的集合中插入2条logging进行连接

dbResponse.insert({eid:1,name:“premaseem”})WriteResult({“nInserted”:1})db.salary.insert({eid:1,salary:6000})WriteResult({“nInserted” :1})

在两个表中validation的数据

db.salary.find({eid:1}){“_id”:ObjectId(“56da1a5b2253b2199c53025b”),“eid”:1,“salary”:6000} db.salary.find({eid:db.employee.find ({eid:1})})db.employee.find({name:“prem”}){“_id”:ObjectId(“56da19d42253b2199c53025a”),“eid”:1,“name”:“prem”}

模拟join,为员工获得工资待遇

map(function(d){var obj = db.salary.findOne({eid:d.eid}); print(obj.salary)})6000