Чтобы узнать непосредственных потомков данного узла, сначала вам нужно определить всех предков данного узла.
Как только вы получили всех предков данного узла, вы можете легко найти непосредственных потомков.
В Ссылке, которой вы поделились, ниже документы в коллекции:
db.categories.insert( { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )
db.categories.insert( { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )
db.categories.insert( { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" } )
db.categories.insert( { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" } )
db.categories.insert( { _id: "Programming", ancestors: [ "Books" ], parent: "Books" } )
db.categories.insert( { _id: "Books", ancestors: [ ], parent: null } )
Скажем, например, нам нужно найти непосредственных потомков узла «Базы данных».
Для этого сначала нам нужно получить всех предков данного узла «Базы данных».
поэтому мы можем найти его с помощью следующего запроса:
var anst = db.categories.find({_id:"Databases"},{_id:0, ancestors : 1 }).toArray();
он вернет нам следующий вывод:
[ { "ancestors" : [ "Books", "Programming" ] } ]
так мы познакомились со всеми предками узла "Базы данных".
Документы, которые будут содержать ТОЛЬКО И ВСЕ узла [ "Книги", "Программирование", "Базы данных" ] в полях "предок", являются непосредственными дочерними элементами узла "Базы данных".
Чтобы найти ближайших детей, мы можем использовать следующий запрос:
anst[0].ancestors.push("Databases");
db.categories.find(
{ "ancestors":
{ $all : anst[0].ancestors ,
$size: anst[0].ancestors.length
}
}
);
Это вернет нам следующие документы:
{ _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases"}
{ _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" }
Здесь нам важен $size, потому что нам нужны ТОЛЬКО те документы, у которых есть ТОЛЬКО [ "Книги", "Программирование", "Базы данных" ] как там "предки".
Другой пример:
var anst = db.categories.find({_id:"Programming"},{_id:0, ancestors : 1 }).toArray();
Выход :
[ { "ancestors" : [ "Books" ] } ]
мы можем запросить, как показано ниже:
anst[0].ancestors.push("Programming");
db.categories.find(
{ "ancestors":
{ $all : anst[0].ancestors ,
$size: anst[0].ancestors.length
}
}
);
Выход :
{ "_id" : "Databases", "ancestors" : [ "Books", "Programming" ], "parent" : "Programming" }
{ "_id" : "Languages", "ancestors" : [ "Books", "Programming" ], "parent" : "Programming" }
person
Yathish Manjunath
schedule
04.09.2015