3
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', { name: String });

var kitty = new Cat({ name: 'Zildjian' });
console.log(kitty);
kitty.save();
console.log(kitty);

この出力:

{ name: 'Zildjian', _id: 523194d562b0455801000001 }二回

タイムアウト後に保存を遅らせてみましたが、同じで、_id が設定されていることを示しnew Catています。.save()

これは mongodb または mongoose によるものですか?実際の永続化の前に _id が設定されるのはなぜですか?

4

1 に答える 1

10

_idほとんどの MongoDb ドライバーは、Node.js のネイティブ ドライバーを含め、ObjectId/ クライアント側を自動的に生成します。ID を一意に生成するために発生する少量のロックがあるため、生成を接続されたクライアントに配布しない理由はほとんどありません。

Mongoose は、オブジェクトを追跡および参照するために一意の識別子を必要とするため、すぐに識別子を作成します。

Node.JS クライアントでは、たとえばプロパティをオプションで設定して、この動作を制御できます。forceServerObjectIdtrue

ただし、ドキュメントごとに Mongoose を使用する場合、これをオーバーライドすることはできません。

Mongoose は db オプション forceServerObjectId false を強制し、オーバーライドできません。Mongoose は、サーバーの auto_reconnect オプションをデフォルトで true に設定しますが、これはオーバーライドできます。認識できるオプションについては、node-mongodb-native ドライバー インスタンスを参照してください。

于 2013-09-12T11:02:44.053 に答える