我有进一步拥有数组的文档。我想查询作为先前查询的结果返回的数组。 例如,我有
{
{_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.我不知道解决方法是什么。在SQL中可以使用子查询执行,但我不知道如何在mongodb中执行此操作。
答案 0 :(得分:2)
也许你应该使用$ 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投影不同。
答案 1 :(得分:0)
> db.employee.insert({eid:1,name:"premaseem"})
WriteResult({ "nInserted" : 1 })
> db.salary.insert({ eid:1, salary:6000 })
WriteResult({ "nInserted" : 1 })
> 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" }
> db.employee.find({name : "premaseem" }).map(function(d){ var obj = db.salary.findOne({eid : d.eid }); print(obj.salary) } )
6000