2013-07-08 34 views
1

我是Mongo的新手,希望得到一些幫助!MongoDB查詢樹狀結構以返回其父母具有特定屬性的子女

我有一個Parent References樹形結構,它看起來是這樣的:

Object { 
    _id: <some id> 
    parent: <an _id or null if topmost> 
    allowed : [userIds] 
} 

我想返回其最頂層父在允許列表中該用戶ID的所有對象的查詢。最頂端的父代是父代爲空的代碼,最頂端的父代也應作爲查詢的一部分返回。

通常情況下,一棵樹會有1-10層,但可能更多。我應該擔心表現嗎?

+0

您需要將祖先存儲在每個對象中,以使您的查詢工作,或使用地圖縮小。 – WiredPrairie

+0

爲每個對象存儲一個附加字段以指定最上面的父項即可。如果我這樣做了,查詢看起來如何? –

+0

http://docs.mongodb.org/manual/tutorial/model-tree-structures/ – WiredPrairie

回答

1

我已經想通了,無論誰需要這個。你必須做兩個基本的查詢:

// 1 - GET THE ANCESTORS 
    var allowedAncestorIds = []; 
    Objects.find({ 
     parent: null, 
     allowed: this.userId 
    }).forEach(function (ancestor) { 
     // 2 - STORE THEIR IDs 
     allowedAncestorIds.push(ancestor._id); 
    }); 

    return Objects.find({ 
     $or: [ 
      // 3 - USE THE ALLOWED ANCESTOR IDs IN THE QUERY TO GET ALL THE OBJECTS 
      {parent: {$in: allowedAncestorIds}}, 
      {allowed: this.userId} 
     ] 
    }); 
相關問題