在一系列MongoDB插入中,我想引用先前插入的项目的objectId

我想插入一系列文档到MongoDB中,每个文档必须引用先前插入的条目。 认为多米诺是下一个下降的项目会知道它被撞倒的项目。

说,我插入三个多米诺骨牌到数据库中,我想实现以下结果(插入时由MongoDB生成_id)。

{ _id: '1', parentId: null }, { _id: '2', parentId: '1' }, { _id: '3', parentId: '2' }, 

我尝试了以下内容:

 let parentId = null; dominos.map(domino => { domino.parentId = parentId; return storeItem(domino) // calls Model.create and returns _id .then((result) => { parentId = result; // a console.log would print the latest _id }) .catch(error => error); }) 

问题是在domino.parentId = parentId子句中收到的parentId不会向上传播,所以即使在插入第二个和第三个项目之后, domino.parentId = parentId仍然为空。

我相信在范围或承诺上都有一点我错过了。 任何build议如何得到这个工作,或者可能是另一种更可行的方法,将不胜感激。

问候 – 实际

安装asynchronous依赖

 npm install --save async 

尝试这个

 const async = require('async') let parentId = null async.each(dominos, function(domino, callback) { domino.parentId = parentId; storeItem(domino) .then((result) => { parentId = result callback() }) }, function (err) { console.log('success') }) 

正如@ Mikey在另一个答案中的评论所build议的那样:

在这种情况下,应该使用async.eachSeries()

使用async.eachSeries确实对我来说是个窍门 – 谢谢!

-法案