我有一个类似的数据结构,因为这:用猫鼬查询得到的只有一个子文档
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,父ID,子ID,GrandChildID和GrandGrandChild ID,并且我想以某种方式只获取所有这些ID的GrandGrandChild对象指向。
丑陋的方式是,但目前我可以开始工作的唯一方法是做一个查询,获取这个GrandParent的大文档,并手动循环遍历所有数组以找到正确的Parent,然后再次循环找到合适的孩子,然后再循环寻找合适的孙子,然后再次循环,找到需要在这里工作的孙子女。
我的问题是,我将如何编写一个查询猫鼬,要么只返回grandgrandchild文档,或只包含子属性的祖父文件,并在该属性只有父对象包括引用子这指的是指grandgrandchild对象的孙子对象,允许其结果下列对象:
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);
这个查询的问题是,unnessicary兄弟不是修剪掉。
我希望有人能帮助我。
Hylke勒布朗
在YouTube上的一些相关视频,其中一个关于[“基数最低原则”](https://www.youtube.com/watch?v=L994ZiVuSTE),另一个关于[存储分层数据]示例(https ://www.youtube.com/watch v = T5Yt6Ndm2QY)。这来自一个关于EDX的Mongoose相关课程,名为[“使用MEAN栈介绍MongoDB”](https://courses.edx.org/courses/course-v1:MongoDBx+M101x+3T2015/info) – 2015-12-25 05:52:13