2013-07-04 51 views
0

我讀的樹形結構這裏的文檔:如何查詢MongoDB中的祖先關係?

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

的層次是:

書籍 - >程序 - > [語言,數據庫 - > [Postgres的,MongoDB的]

在本文檔中,它說:

的查詢檢索節點的父是快速和簡單的:

db.categories.findOne({ _id: "MongoDB" }).parent 

這很有道理。但是,如何根據祖先的屬性運行查詢?例如,假設我想查找祖父擁有「書籍」_id的所有文檔,而不是僅僅檢索父書籍,那我該怎麼做?答案應該是「語言」和「數據庫」。

+0

您可能可以通過在特定索引處查找匹配來檢查祖先。 (老實說,圖形數據庫並不是MongoDB的甜蜜點)。 – WiredPrairie

回答

0

如果你的樹結構是固定的。您可以通過以下方式查詢,在此之前,僅僅通過以下網址更改您的MongoDB的結構,

http://docs.mongodb.org/manual/tutorial/model-tree-structures-with-nested-sets/

得到數據庫的所有祖先,

VAR databaseCategory = db.categories.findOne( {_id:「數據庫」});

db.categories.find({left:{$ lt:databaseCategory.left},right:{$ gt:databaseCategory.right}});

{ 「_id」: 「書籍」, 「親本」:0, 「左」:1, 「右」:12} { 「_id」: 「編程」, 「親本」: 「書籍」 , 「左」:2, 「右」:11}

獲得數據庫的所有後代,

變種databaseCategory = db.categories.findOne({_id: 「數據庫」}); db.categories.find({left:{$ gt:databaseCategory.left},right:{$ lt:databaseCategory.right}});

{ 「_id」: 「的MongoDB」, 「親本」: 「數據庫」, 「左」:6, 「右」:7} { 「_id」: 「DBM」, 「親本」:「數據庫「,」左「:8,」右「:9}