Mongodb Mongoose findOneAndUpdate:更新对象数组中的对象

Mongodb Mongoose findOneAndUpdate:更新对象数组中的对象,mongodb,mongoose,Mongodb,Mongoose,我的问题与本文中描述的完全相同(因此标题类似): 鉴于这种模式: const SavedFoodsSchema = new Schema({ user: { type: Schema.Types.ObjectId, ref: 'User' }, list: [ { id: { type: Number, required: true, unique: true }, name: { type: String, required: true },

我的问题与本文中描述的完全相同(因此标题类似):

鉴于这种模式:

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集合中查找文档,然后在
列表
数组中,对于数组中的第一个对象,将
名称
设置为“其他内容”

回调被调用,没有错误,但是更改不会反映在我的数据库中


我做错什么了吗?

我认为您的
id
user
字段不匹配

尝试使用
用户更改
id

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

我也有同样的问题,所以我只是从
.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)
    }
  )
}

对我有用。

id:userId
user:userId
这样可以吗?因为你的问题似乎没问题…@AnthonyWinzlet非常感谢你!“id”确实不正确,正如您所建议的,该字段实际上是“用户”-它现在可以完美地工作。如果您想添加此作为答案,我将选择它作为已接受的答案。
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)
    }
  )
}