2

MongoDb のフィールドの自動インクリメントに関するこの記事を見ています。 http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/

これは理論的には良いようですが、すべての DB 呼び出しが非同期である私のアプリケーションでは機能しません。Ps、私はモンゴスキンを使用しています。このことを考慮:

var getNextSequence function (name) {
  db.counters.findAndModify({_id: 'invoiceNr'}, {}, {$inc: {seq: 1}}, {new: true}, function(err, doc) {
    if (err) {
      return next(err);
    }
    return doc.seq;
  });
}; 

var seq = getNextSequence('invoiceNr');
console.log(seq);

もちろん、これ(Console.log)は実行時に値を持ちません...

これにより、代わりにネストされたコールバックについて考えるようになります (従来の Node スタイル):

db.counters.findAndModify({_id: 'invoiceNr'}, {}, {$inc: {seq: 1}}, {new: true}, function(err, doc) {
  if (err) {
    return next(err);
  }
  var seq = getNextSequence('invoiceNr');
  // Do something with the seq, like using it when inserting another document.
});

これは 1 つのドキュメントでは問題なく機能しますが、一括挿入 (挿入する複数のドキュメントの配列を渡す) を行うと、これがどのように機能するかわかりません。そして、一括挿入が必要です。

ループと単一の挿入に戻ることは、良い解決策とは思えません。

これに対する良い解決策はありますか?

4

1 に答える 1