猫鼬中的嵌套查询执行问题
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
.
我正在尝试以下查询。我写这篇文章是为了获取文档列表,对于每个文档,我需要 运行 一些逻辑来获取标签列表。使用此标签列表,我使用获得的标签列表更新文档。
我得到 '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
.