Quando si crea un documento con oggetti nidificati (ad esempio una matrice di oggetti), a ogni oggetto viene assegnato il proprio _id. Ad esempio, il mio schema è simile al seguente:Mongoose aggiunge _id a tutti gli oggetti nidificati
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
Ogni oggetto dell'array lists
prova un _id, come è ogni allocation
oggetto dell'array lists.allocations
, quando i documenti vengono creati alla fine. Questo sembra un eccesso e un eccesso del documento, ma c'è un motivo per cui MongoDB (o Mongoose) ha bisogno che il documento contenga queste informazioni aggiuntive? In caso contrario, mi piacerebbe evitare che accada in modo che l'unico _id è sul documento di root.
Inoltre, Mongoose crea automaticamente un id
virtuale per _id
, di cui ho bisogno perché il mio codice client si aspetta un campo id
. Questo è il motivo per cui sto facendo tornare i virtual con JSON. Tuttavia, poiché ci sono campi _id
in tutto il documento, non solo nella radice, questo virtuale duplica tutti di di essi. Se non c'è modo di impedire i campi _id aggiuntivi, come posso ottenere un virtual che si applica solo al documento root _id? O se c'è un modo migliore per fare quello che sto cercando di fare con esso, quale sarebbe?
Nella versione (3.6) sono in grado di aggiungere semplicemente _id: false nei sottodoc direttamente nello schema principale senza la necessità di creare sottosistemi separati – cyberwombat
Se stai cercando una soluzione JavaScript: http://stackoverflow.com/questions/17254008/stop-mongoose-from-created-ids-for- sottodocument-array –