2016-09-03 6 views
0

私のmongodbデータベースに配列内の各項目のドキュメントを作成しようとしています。array.map()を使用してarray内の各要素のMongoDBに保存します。

これは、array.forEach()を使用して、繰り返しごとに要素を配列にプッシュすることで実行できます。

しかし、私はむしろ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を生成できると思いますか?あなたが言ったように

答えて

0

あなたはnode.save()を返す場合でも、何も返さない{multi: true}

あなたのコードで複数の文書を挿入することができますが、それはすぐに返すことがあります。 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, 
}) 
関連する問題