繁体   English   中英

使用array.map()在MongoDB中保存数组中的每个元素

[英]Save in MongoDB for each element in array using array.map()

我试图在我的mongodb数据库中为数组中的每个项目创建一个文档。

我知道可以通过使用array.forEach()并在每次迭代时将元素推入数组来完成。

但是我宁愿使用array.map()实现相同的array.map()

我努力了

const a = 2;
const myArray = [3, 4, 5, 6];
const nodes = myArray.map((b) => {
  const node = new Node({
    a: a,
    b: b
  });
  node.save((err, newNode) => {
    return {
      data: {
        id: newNode.id,
        a: a,
        b: b
      }
    };
  });
});

但它返回[ undefined, undefined, undefined, undefined, undefined ]

我猜是因为它等待node.save()运行。

另外,由于我知道我将一次创建多个文档,因此可以这样做而不是多次调用数据库吗? 我仍然需要这些ID,但是我想我可以在访问数据库之前生成这些ID?

您可以使用{multi:true}插入多个文档

您的代码不会返回任何内容,但是就像您说的那样,即使您返回node.save(),它也可能会立即返回。 您可以使用Promise.all强制执行

const a = 2;
const myArray = [3, 4, 5, 6];
const nodes = myArray.map((b) => {
  const node = new Node({
    a: a,
    b: b
  });
  return new Promise((resolve, reject) => {
    node.save((err, newNode) => {
      resolve({
        data: {
          id: newNode.id,
          a: a,
          b: b
        }
      })
    });
  })
});
Promise.all(nodes, (result__ARRAY) => {
   // do something with this array, 
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM