猫鼬findOneAndUpdate:更新对象数组中的对象

时间:2018-07-07 19:57:30

标签: mongodb mongoose

我有与此线程中描述的完全相同的问题(因此标题相似):Mongoose findOneAndUpdate -- updating an object inside an array of objects

给出此模型:

const SavedFoodsSchema = new Schema({
  user: { type: Schema.Types.ObjectId, ref: 'User' },
  list: [
    {
      id: { type: Number, required: true, unique: true },
      name: { type: String, required: true },
      points: { type: Number, required: true }
    }
  ]
})

我编写了以下函数,目的是为了测试根据userId参数在SavedFoods集合中查找文档,然后在list数组中为数组中的第一个对象设置name到“别的东西”。

function updateFood (userId) {
  // This didn't work
  SavedFoods.findOneAndUpdate(
    {
      id: userId,
      'list.id': 0
    },
    {
      $set: {
        'list.$.name': 'Something else'
      }
    },
    null,
    (err) => {
      if (err) {
        console.log('Error:', err)
      } else {
        console.log('Updated', userId)
      }
      process.exit(0)
    }
  )
}

调用了回调并且没有错误,但是更改没有反映在我的数据库中。

我做错什么了吗?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,所以我只是从$set删除.findOneAndUpdate

示例:

function updateFood (userId) {
  SavedFoods.findOneAndUpdate(
    {
      id: userId,
      'list.id': 0
    },
    {
      {'list.$.name': 'Something else'}
    },
    null,
    (err) => {
      if (err) {
        console.log('Error:', err)
      } else {
        console.log('Updated', userId)
      }
      process.exit(0)
    }
  )
}

为我工作。

答案 1 :(得分:1)

我认为您不匹配iduser字段

尝试用id更改user

SavedFoods.findOneAndUpdate(
    {
      user: userId,
      'list.id': 0
    }
)