Извлечение всех предков документа с помощью Mongoose - PullRequest
0 голосов
/ 18 мая 2018

Суть этого вопроса заключается в том, чтобы узнать , как правильно извлекать всех предков документа с помощью 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(...)**.Любое решение для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...