2015-04-06 8 views
16

MongoDB's documentation'a göre save numaralı çağrıya yeni bir belge oluşturulur veya _id verilirse varolan bir belgeyi günceller. Mongoose'un belgeleri less detailed'dur ve eklenip güncellenmeyeceği veya güncellenmeyeceği anlamına gelmez.Mongoose/MongoDB yinelenen anahtar hatası kaydediyor mu?

Ben bir belgeyi güncelleştirmek için firavunfaresi en save işlevi kullanmaya çalışıyorsunuz, ama ben hatayı almaya devam:

{"error":{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: staging.participants.$_id _ dup key: { : ObjectId('5515a34ed65073ec234b5c5f') }"}}

mu Mongoose en save işlevi mongodb en save fonksiyonu gibi bir Upsert gerçekleştirmek yoksa sadece bir ekleme performans? save bir ekleme olacak ya da see here olabildiğince bir güncelleme, isNew bayrak olup olmadığını tanımlayan unsur

cevap

16

.

Bu bayrak, belge örneği bir find sorgusundan (veya onun varyasyonlarından herhangi biri) döndüğünde otomatik olarak false olarak ayarlanır. el belgeyi başlatmasını ise, kaydetmeden önce false bu bayrağı ayarlamayı deneyin: aynı zamanda bir init işlevi yoktur

var instance = new Model({ '_id': '...', field: '...' }); 
instance.isNew = false; 
instance.save(function(err) { /* ... */ }); 

, başlatmak olacağını belge ve automatically set isNew to false:

var data = { '_id': '...', field: '...' }; 
var instance = new Model(); 
instance.init(data, {}, function(err) { 
    instance.save(function(err) { /* ... */ }) 
});