Суть этого вопроса заключается в том, чтобы узнать , как правильно извлекать всех предков документа с помощью Mongoose. Я использую это структурное дерево модели с массивом предков :
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 } )
Вот что я делаю, я пытаюсь перебрать nextParent
и присвоить ему результат parentCategory.parent
после вызова ancestors.unshift(nextParent)
, но, к сожалению, он не работает какпредназначенный как parentCategory.parent
не присваивает, потому что model.findOne()
является асинхронным:
const { parent } = req.body;
...
const ancestors = [];
let nextParent = parent;
while (nextParent) {
model.findOne(
{ _id: nextParent },
(err, parentCategory) => {
assert.ifError(err);
if (parentCategory) {
ancestors.unshift(nextParent);
}
nextParent = parentCategory ? parentCategory.parent : false;
}
);
}
Есть ли правильный способ получить всех предков документа? Если я делаюотлично, я уже сделал эту модификацию:
const ancestors = [];
let nextParent = parent;
while (nextParent) {
let parentCategory = await model.findOne( { _id: nextParent } );
if (parentCategory) {
ancestors.unshift(nextParent);
}
nextParent = parentCategory ? parentCategory.parent : false;
}
Я сейчас получаю SyntaxError: Unexpected identifier
-> let parentCategory = await **model.findOne(...)**
.Любое решение для этого?