我有与此线程中描述的完全相同的问题(因此标题相似):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)
}
)
}
调用了回调并且没有错误,但是更改没有反映在我的数据库中。
我做错什么了吗?
答案 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)
我认为您不匹配id
和user
字段
尝试用id
更改user
SavedFoods.findOneAndUpdate(
{
user: userId,
'list.id': 0
}
)