更新mongoose中具有多个条件的对象数组失败

时间:2016-12-29 00:11:26

标签: javascript node.js mongodb express mongoose

[{
  "date": "18/12/2010",
  "babies": [{
    "id":1,
    "name": "James",
    "age": 8,
  }, {
    "id":2,
    "name": "John",
    "age": 4,
  }]
}]

我想将约翰的年龄设定为10但却失败了。我必须做多个条件才能更明确。

Babies.update({"date":date, 'babies.id': 1}, {'$set': {age:10}, function(err, response){
        res.json(response);
  })

第一个条件是日期,第二个条件是婴儿的对象数组,在这种情况下它是id。以上查询没有错误也没有效果,我哪里做错了?

我通过执行此查询进行调试

Babies.find({'babies.id': 1}, function(err, response){
        res.json(response);
  }) 

它无法找到正确的目标,也许是问题所在

2 个答案:

答案 0 :(得分:0)

使用{'$set': {age:10}}代替Babies.update({"date":date, 'babies.id': 1}, {'$set': { 'babies.$.age':10 } }, function(err, response){ res.json(response); })

npm run dev
  

位置$运算符标识要更新的数组中的元素,而不显式指定元素在数组中的位置。

有关详细信息,请参阅MongoDB Positional Operator

答案 1 :(得分:0)

而不是仅在$ set标志中传递字段值{age:10}的对象,而是以Array.index.field的格式传递值。这样就变成了这样-

{ $set: { 'babies.$.age': 10 } }