Mongoose findOneAndUpdate更新为ObjectId

时间:2016-09-02 21:29:45

标签: node.js mongodb mongoose

我有以下架构:

let PlayerSchema = new mongoose.Schema( {
    name: String,
    country: String,
    roundResults: [ {
        round: Number,
        result: String,
        points: Number
    } ]
} );

当我使用findOneAndUpdate更新文档时:

Player.findOneAndUpdate({ id: req.params.id },
    {$push: {"roundResults": result }},
    {safe: true, upsert: true, new : true},
    (err, player) => {
        if( ! err && player ) {
            res.json( player );
        } else {
            res.json( err );
        }
    }
);

我得到以下意外结果:

[
  {
    "_id": "57c9eb55c2a07a401462e3ec",
    "name": "Joe Bloggs",
    "country": "England",
    "__v": 0,
    "roundResults": [
      {
        "_id": "57c9eba11c597d5e1460e4f0"
      }
    ]
  }
]

我没有roundResults架构但是,如上所示,我得到_id,我希望看到:

"roundResults": [
    "round": 1,
    "result": "1",
    "points": 3
]

任何人都可以解释为什么会这样,或者我如何将其嵌套在我直接显示的数据上面?

1 个答案:

答案 0 :(得分:1)

即使您传递子文档的文字对象,它也是Schema。并且会为此生成id。如果是数组,则定义其类型Array

注意,如果为属性定义任何模式,则将其视为子网和实体,因此它具有id