MongooseJS没有正确保存数组

时间:2012-11-12 19:54:20

标签: javascript node.js mongoose

我觉得我在使用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.
      }
    });

1 个答案:

答案 0 :(得分:8)

由于您在模式中定义了location: [],因此Mongoose会将该字段视为Mixed,这意味着您必须在更改后通知Mongoose。请参阅文档here

将更新user.location的代码更改为:

if(user.location.length > 2) {
  user.location.splice(0,1);
  user.markModified('location');
}