我有一个类似的数据结构:
var GrandGrandChild = mongoose.Schema({
attribute: String,
id: Number
});
var GrandChild = mongoose.Schema({
children: [GrandGrandChild],
id: Number,
irrelevantAttribute: String
});
var Child = mongoose.Schema({
children: [GrandChild],
id: Number,
irrelevantAttribute2: String
});
var Parent = mongoose.Schema({
children: [Child],
id: Number,
irrelevantAttribute3: String
});
var GrandParent = mongoose.Schema({
children: [Parent],
id: Number,
irrelevantAttribute4: String
});
这些是很多包含子文档的集合。请注意,ID 对于它们的兄弟姐妹来说是唯一的,但对于具有相同架构的所有元素来说并不是唯一的。
所以一个祖父母可以有一个 id 为 0 的父母,另一个祖父母也可以有一个 id 为 0 的父母。但一个祖父母不能有 2 个 id 为 0 的父母。
唯一被保存的模式是 GrandParent 模式,mongoose/mongodb 为这个祖父母的所有数据制作了一个很好的大单文档。(正是我要找的)
所以这是我的问题:我有一个 GrandParent ID、Parent ID、子 ID、GrandChildID 和 GrandGrandChild ID,我想以某种方式只获取所有这些 ID 指向的 GrandGrandChild 对象。
丑陋的方法是,但目前我可以开始工作的唯一方法是进行查询以获取 GrandParent 的这个大文档,然后手动循环遍历所有数组以找到正确的父级,然后再次循环以找到正确的父级孩子,然后再次循环以找到正确的孙子,然后再次循环并在这里找到我需要的孙子。
我的问题是,我将如何在猫鼬中编写一个查询,该查询要么仅返回孙子文档,要么仅返回包含子属性的祖父文档,并且在该子属性中,仅包含引用子对象的父对象引用孙对象的孙对象,允许以下结果:
GRANDPARENT PARENT CHILD GRANDCHILD GRANDGRANDCHILD
grandparent.children[0].children[0].children[0].children[0].attribute;
我希望有人可以在这个查询上帮助我,据我所知是这样的:
GrandParentModel.findOne(
{
"id" : 0,
"children.id" : 0,
"children.children.id" : 0,
"children.children.children.id" : 0,
"children.children.children.children.id" : 0
},
{"children.children.children.children.$" : 1}, callback);
这个查询的问题是没有修剪掉不必要的兄弟姐妹。
我希望有人可以帮助我。
希尔克·布朗