【发布时间】:2016-12-26 19:48:29
【问题描述】:
我有一个非常简单的问题,但我找不到一个优雅的解决方案来解决这个问题。 在下面的代码中,我有两个对 mongo DB 的嵌套调用。我使用 Monk 来管理我的电话。 问题是:for 循环 (1) 在嵌套插入发生之前循环。所以下一个 find (2) 指令没有找到最后插入的动作。
调用顺序为 1-2-2-2-3-3-3(对于大小为 3 的 actionList)。所以我所有的数据都被插入了。
我的目标是调用顺序为 1-2-3-2-3-2-3
您是否知道如何管理此类问题,而无需在我的数据库上进行大量查找并在服务器端管理我的列表? (获取所有数据,让自己搜索,这很可怕,插入我想要的元素,然后将其全部推送到数据库......)
for (var action of actionList)//(1)
{
collectionActions.find(//(2)
{eventid : action.eventid},
function(e,actionsFound)
{
if (actionsFound.length == 0)
{
collectionActions.insert(action, function(err, result)//(3)
{
console.log("insert action : " + action._id);
})
}
}
)
}
【问题讨论】:
-
我已经尝试过 Promise,因为上一版本的 Monk 在 DB 调用后返回 Promise (automattic.github.io/monk/docs/collection/find.html)。但是,基本上,问题将完全相同。或者我应该为每个查找指令填写一系列承诺?
标签: node.js mongodb asynchronous callback