При создании документа с вложенными объектами (например, массивом объектов) каждому объекту присваивается свой собственный _id. Например, моя схема выглядит так:
mongoose = require "mongoose"
Schema = mongoose.Schema
schema = new Schema
name:
type: String
required: true
unique: true
trim: true
lists: [
list:
type: Schema.Types.ObjectId
required: true
ref: "List"
allocations: [
allocation:
type: Number
required: true
]
]
createdAt:
type: Date
default: Date.now
updatedAt:
type: Date
# Ensure virtual fields are serialised.
schema.set "toJSON",
virtuals: true
exports = module.exports = mongoose.model "Portfolio", schema
Каждому объекту в массиве lists
присваивается _id, как и каждый объект allocation
в массиве lists.allocations
, когда документы в конечном итоге создаются. Это кажется излишним и раздутым документом, но есть ли причина, по которой MongoDB (или Mongoose) нуждается в документе, чтобы содержать эту дополнительную информацию? Если нет, я бы хотел, чтобы это не произошло, так что единственный _id находится в корневом документе.
Кроме того, Mongoose автоматически создает виртуальный id
для _id
, который мне нужен, потому что мой клиентский код ожидает поле id
. Вот почему у меня есть виртуальные машины, возвращенные с JSON. Однако, поскольку во всем документе есть поля _id
, а не только в корне, этот виртуальный дублирует их все. Если нет возможности предотвратить дополнительные поля _id, как я могу заставить виртуальную машину применять только к корневому документу _id? Или, если есть лучший способ сделать то, что я пытаюсь сделать с ним, что бы это было?