2017-05-17 35 views
2

看看我的下面的示例架構。如何使用貓鼬同時更新子數組和父元素?

const ParentSchema = new mongoose.Schema({ 
    id:String 
    name:String 
    age:Number 
    child:[{ 
     id:String, 
     name:String, 
     age:Number}] 
    }) 

const collectionName = mongoose.model("parent", ParentSchema) 

現在我想增加孩子和家長的年齡,爲他們每個人的具體身份。兩者在同一時間。我試着用下面的查詢來做它

collectionName.update({'_id':new mongoose.Types.ObjectId("59198a3e73ae303f97e97e8f"),'child._id':new mongoose.Types.ObjectId("59198a3e73ae303f97e97eds")}, 
{$inc:{'age':1},$inc:{'child.$.age':1}},function(err,res){ 
    if(err){ 
     console.log(err.message) 
    }else{ 
console.log(res) 
} 

上面的查詢運行良好,但它只更新了孩子的年齡,而不是父母的年齡。現在我不確定我應該如何模擬我的查詢來更新兩者?

回答

3

我這個查詢工作:

db.collection.update({ 
    '_id': new mongoose.Types.ObjectId("59198a3e73ae303f97e97e8f"), 
    'child.id': A SPECIFIC ID 
}, 
{ 
    $inc: { 'age': 1, 'child.$.age': 1 } 
}); 

您的查詢不工作,因爲$運營商需要驗證之前從嵌套數組適當增加孩子的條件。如果你想深化,這裏是official documentation

+0

感謝您更正@Gianmarco。實際上,我寫了不正確的查詢是我的錯。但是在我的真實程序中,我已經寫下了正如你所提到的正確版本的查詢。它不起作用。查詢你提到的actully更新child.age爲該特定的child.id的條件,但它沒有更新父對象的年齡 –

+0

我已經在mongo shell中測試了這個查詢,它的工作原理。在我的情況下,查詢沒有使用id,但它使用了這個條件:{'name':「mark」,'child.name':「mark's son」}。現在我不知道條件類型是否可以改變結果,但如果你想要的話,你可以嘗試它來驗證。 – Gianmarco

+1

是的@Gianmarco。你是對的,你的版本查詢的確在我的代碼上測試過之後對我來說還是很有用的。所以基本上我在執行兩個$ inc集時錯了。那就是它錯了的地方。當我用$ inc集合中的兩個增量更新我的查詢版本時,它確實有效。感謝您的時間 –