假设我在collection
:
{ id: 1, age: 5, name: "Nick" }
{ id: 2, age: 7, name: "John" }
{ id: 3, age: 2, name: "Anna" }
{ id: 4, name: "Peter", children: [1,2,5] }
{ id: 5, age: 25, name: "Mat", children: [3] }
我想要一个查询,以这种形式返回 有孩子的人 ,按命令他们的age
:
[
{ id: 4, name: "Peter", children: [
{ /* Nick's record */ },
{ /* John's record */ },
{ /* Mat's record */ }
] },
{ id: 5, name: "Mat", age: 25, children: [
{ /* Anna's record */ }
] }
]
注意:响应的children
数组中的人也应按其age
答案 0 :(得分:1)
以下查询将检索具有子项的文档。但是这不能检索孩子的记录,你必须通过另一个查询来填充这些记录。在mongodb中不可能像在sql中那样真正的连接。
db.yourCollection.find({"children.0": {$exists:true}}).sort({age:1})
还有另一个功能,如数据库引用,可用于使用其ID从另一个集合中获取数据。但是您必须更改数据结构才能使用它们。有关详细信息,请查看以下内容:Database References
答案 1 :(得分:1)
请查看以下查询:
db.collection.find({children:{$exists:1}}).sort({age:1}).forEach(
function(doc){
var printdoc = doc;
printdoc.children = db.collection.find(
{ id: { $in: doc.children }
}).sort({age:1}).toArray();
printjson(printdoc);
});
这将为您提供以下所需的输出:
{
"id" : 4,
"name" : "Peter",
"children" : [
{
"id" : 1,
"age" : 5,
"name" : "Nick"
},
{
"id" : 2,
"age" : 7,
"name" : "John"
},
{
"id" : 5,
"age" : 25,
"name" : "Mat",
"children" : [
3
]
}
]
}
{
"id" : 5,
"age" : 25,
"name" : "Mat",
"children" : [
{
"id" : 3,
"age" : 2,
"name" : "Anna"
}
]
}