我觉得我在使用mongoosejs时遇到了麻烦。我试图保持一个特定大小为2的对象数组。当调用此函数时,它会向数组添加一个项目,并在必要时将其缩小。但是,当我保存数组时,大小不会减少到2.遵循代码和注释。感谢您提供的任何帮助。
user.location.push(req.body); //Add a new object to the array.
if(user.location.length > 2) //If the array is larger than 2
user.location.splice(0,1); //Remove the first item
console.log(user.location); //This outputs exactly what I would expect.
user.save(function(err, updatedUser){
if(err)
next(new Error('Could not save the updated user.'));
else {
res.send(updatedUser); //This outputs the array as if it was never spliced with a size greater than 2.
}
});
答案 0 :(得分:8)
由于您在模式中定义了location: []
,因此Mongoose会将该字段视为Mixed
,这意味着您必须在更改后通知Mongoose。请参阅文档here。
将更新user.location
的代码更改为:
if(user.location.length > 2) {
user.location.splice(0,1);
user.markModified('location');
}