Mongoose将_id重命名为子文档上的id

时间:2018-06-17 16:58:49

标签: mongodb mongoose

我有这个包含'hardcoded'子文档的Mongoose模型架构 我无法弄清楚如何将_id重命名为子文档的id。

对于父级我使用以下代码来包含id prop,但这似乎不适用于子文档。

menuItemSchema.set('toJSON', {
  virtuals: true
})

我尝试了什么:

menuItemSchema.set('toJSON', {
  virtuals: true,
  extras: {    // <-- child
    virtuals: true,
  }
})

模式

const menuItemSchema = mongoose.Schema({
  name: {
    type: String
  },
  extras: [{   // <-- child
    name: {
      type: String
    },
    ...otherProps
  }],
  ...otherProps
})

menuItemSchema.set('toJSON', {
  virtuals: true
})

有办法吗?我是否需要创建一个单独的模式才能启用

.set('toJSON', { virtuals: true })

结果

{
  "_id": "5b2691666034483916a59fe8",
  "name": "Margharita",
  "extras": [
    {
      "_id": "5b2691666034483916a59fed",
      "name": "Sauce"
      // ^ got no id
    }, 
    ...
  ],
  "__v": 0,
  "id": "5b2691666034483916a59fe8"  // <- got id
}

1 个答案:

答案 0 :(得分:1)

toJSON / toObject不接受选项extras,它对架构不执行任何操作。 Reference

默认情况下,Mongoose文档将具有id虚拟getter。 Refercence

尝试明确定义子模式:

const ExtraSchema = new Schema({...});

const menuItemSchema = new Schema({
  extras : [ExtraSchema]
});

如果这不起作用,请尝试transform中的toJSON选项:

ExtraSchema.set('toJSON', {
  transform : (doc, result) => {
    return {
      ...result,
      id : result._id
    };
  }
});