ドキュメントが存在しない場合は挿入する必要があります。私は "upsert"オプションがそれを行うことができることを知っていますが、私はいくつかの特別な必要があります。カスタム_id値を使用しているときにmongodbでアップサイズが発生する
まず、_idフィールドのみでドキュメントを作成する必要がありますが、ドキュメントがまだ存在しない場合にのみ作成する必要があります。私の_idフィールドは私によって生成された番号です(ObjectIdではありません)。私はその後、「アップサート」オプションを使用する場合、私は
db.mycollection.update({ _id: id }, { _id: id }, { upsert: true });
私たちは$セットに_idを使用できないことを知っている「のModは_idに許可されていません」を取得します。
私の質問は:「作成した場合、存在しない」という方法がmongodbに原子的に存在するかどうかです。
EDIT: @Barrieによって提案されたように、これは(nodejsとマングースを使用して)動作します。
var newUser = new User({ _id: id });
newUser.save(function (err) {
if (err && err.code === 11000) {
console.log('If duplicate key the user already exists', newTwitterUser);
return;
}
console.log('New user or err', newTwitterUser);
});
しかし、それはそれを行うための最善の方法であれば、私はまだだろうか。
'save'操作をしようとしていますか?つまり、db.collection.save({"_ id":your_id}) –
既に存在する場合、重複キーエラーで保存に失敗します。 – aartiles