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 つのドキュメントでは問題なく機能しますが、一括挿入 (挿入する複数のドキュメントの配列を渡す) を行うと、これがどのように機能するかわかりません。そして、一括挿入が必要です。
ループと単一の挿入に戻ることは、良い解決策とは思えません。
これに対する良い解決策はありますか?