猫鼬中的嵌套查询执行问题

Issue with Nested query execution in mongoose

我正在尝试以下查询。我写这篇文章是为了获取文档列表,对于每个文档,我需要 运行 一些逻辑来获取标签列表。使用此标签列表,我使用获得的标签列表更新文档。

我得到 'updateAndPrint' 函数的标签列表为空白。我想这是一个关于 promise 出现的问题。

这里是查询:

DB.todoTable.find()
    .limit(10)
    .exec(function (err, todos) {
        var tags = [];
        for (var todo in todos) {
            var text = todos[todo].text;
            var id = todos[todo]._id;
            console.log(text);
            tags = getTagsList(text);

            (function updateAndPrint(id, tags) {
                DB.todoTable.update({_id: id}, {$addToSet: {tags: {$each: tags}}},
                    function (err, numberUpdated, result) {
                        if (err) throw err;

                        (function printResult(id) {
                            DB.todoTable.findOne({_id: id})
                                .exec(function (err, todo) {
                                    if (err) throw err;

                                    console.dir(todo.tags);
                                });
                        })(id);
                    });
            })(id, tags);

        }
        console.dir(tags);
    });

如何将此查询发送到 运行。或者是否有更好的方法来执行相同的逻辑。

编辑

'tags = getTagsList(text)' 必须在我 运行 更新操作之前执行。

使用 findAndModify 而不是更新并设置选项 {new: true}

更新

您可以将要调用的函数作为回调传递给 findTags,因此 findTags(text) 您将拥有 findTags(text, callback),您的回调将是 updateAndPrint 功能。因此,当您在 findTags 中获得所有数据时,您可以调用 callback.