2017-01-06 28 views
5

Bir dizi değerini güncellemek istiyorum ancak bunu yapmak için uygun yöntemden emin değilim, bu nedenle, aşağıdaki yöntemi uyguladıktan sonra benim için çalışmadım. Benim modeliMongoose'da bir dizi değeri nasıl güncellenir

childrens: { 
     type: Array, 
     default: '' 
    } 

Benim sorgu içinde

Benim modelim, çocuk alanı,

Employeehierarchy.update({ _id: employeeparent._id} ,{ $set: {"$push": { "childrens": employee._id }} }) 
    .exec(function (err, managerparent) {}); 

kimse bana help.Thanks verir misiniz.

cevap

10

Sen iç içe operatörler ile aynı güncelleme ifadede hem $set ve $push kullanamaz.

update operators kullanmak için doğru sözdizimi aşağıdaki gibidir: <operator1>, <operator2> güncelleme operatörler listesinin herhangi birinden olabilir

{ 
    <operator1>: { <field1>: <value1>, ... }, 
    <operator2>: { <field2>: <value2>, ... }, 
    ... 
} 

here belirtilmiş.

Diziye yeni bir öğe eklemek için, tek bir $push işleci yeterli olacaktır. Eğer

Employeehierarchy.findByIdAndUpdate(employeeparent._id, 
    { "$push": { "childrens": employee._id } }, 
    { "new": true, "upsert": true }, 
    function (err, managerparent) { 
     if (err) throw err; 
     console.log(managerparent); 
    } 
); 

orijinal update() yöntemi kullanarak olarak değiştirilmiş belge dönmek findByIdAndUpdate güncelleme yöntemini kullanabilirsiniz, sözdizimi geri arama işlevi argüman alıp hangi

Employeehierarchy.update(
    { "_id": employeeparent._id}, 
    { "$push": { "childrens": employee._id } }, 
    function (err, raw) { 
     if (err) return handleError(err); 
     console.log('The raw response from Mongo was ', raw); 
    } 
); 

olduğunu (err, raw) nerede

  • err herhangi
  • raw değiştirilmiş belgeyi kontrol etmek istediğimizden

, sana update() yöntemle beri findByIdAndUpdate işlevini kullanın öneririm Mongo tam yanıttır gerçekleştiyse hatadır değiştirilmiş belgeyi vermeyecek, sadece mongo'dan tam yazma sonucu. Belgedeki bir alanı güncelleştirmek ve aynı zamanda bir diziye bir öğe eklemek isterseniz


o zaman

Employeehierarchy.findByIdAndUpdate(employeeparent._id, 
    { 
     "$set": { "name": "foo" }, 
     "$push": { "childrens": employee._id } 
    } 
    { "new": true, "upsert": true }, 
    function (err, managerparent) { 
     if (err) throw err; 
     console.log(managerparent); 
    } 
); 

yukarıda name alanı "foo" güncelleyecektir yapabilirsiniz ve çalışan kimliğini childrens dizisine ekleyin.

+0

: managerparent tanımlanmadı – MMR

+0

Thsnks o wrkd chridam böylece sorgu gibi olabilir. – MMR

+0

hala bir sorum var :), eğer sorun yok. – MMR

2

gibi bu childrens içeren

eğer dize değerleri daha sonra model olabilir izleyebilir:

childrens: [{ 
    type : String 
}] 

eğer childrens başka bir koleksiyona _id ait Nesne Kimliği değerleri içerir ve doldurmak istiyorum sonra model olabilir gibi:

childrens: [{ 
    type : mongoose.Schema.Types.ObjectId, 
    ref: 'refModelName' 
}] 

$set'u kullanmanıza gerek yok $push'u kullanın childrens dizisine değer ekleyin. i uncaughtException olarak hatayı alıyorum (managerparent 'kk' +) yöneticisi baskı console.log için test ederseniz

Employeehierarchy.update(
    { _id: employeeparent._id}, 
    {"$push": { "childrens": employee._id } } 
).exec(function (err, managerparent) { 
    // 
}); 
+0

I model ilan edilir bu yüzden – MMR

+0

nesnesinin bir dizisi olmak istemediğim nesne dizisi, ids (birinci işlem için bir dize ve bir ObjectId olarak ikinci işlem için) ids dizisini içerecek dizidir. @ nlr_p –

+0

Ok Thaks Shaishab Roy. – MMR

İlgili konular