我有一個類似的數據結構,因爲這:用貓鼬查詢得到的只有一個子文檔
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