在mongoose中执行嵌套查询

时间:2015-02-10 17:57:15

标签: javascript node.js mongodb mongoose promise

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

我将'updateAndPrint'功能的标签列表设为空白。我想这是一个承诺的问题。

以下是查询:

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)'。

1 个答案:

答案 0 :(得分:1)

使用findAndModify代替更新并设置选项{new: true}

<强>更新

您可以将您的函数作为回调传递给findTags,而findTags(text)代替findTags(text, callback),您的回调将是updateAndPrint函数。因此,当您在findTags中获得所有数据后,您可以调用callback