Utilizzando Mongoose versione 3.6.4Mongoose.js: aggiornamento atomico delle proprietà annidate?
dire che ho un documento MongoDB in questo modo:
{
"_id" : "5187b74e66ee9af96c39d3d6",
"profile" : {
"name" : {
"first" : "Joe",
"last" : "Pesci",
"middle" : "Frank"
}
}
}
e ho il seguente schema per gli utenti:
var UserSchema = new mongoose.Schema({
_id: { type: String },
email: { type: String, required: true, index: { unique: true }},
active: { type: Boolean, required: true, 'default': false },
profile: {
name: {
first: { type: String, required: true },
last: { type: String, required: true },
middle: { type: String }
}
}
created: { type: Date, required: true, 'default': Date.now},
updated: { type: Date, required: true, 'default': Date.now}
);
E io presentare un modulo di passaggio un campo denominato: profile[name][first]
con un valore di Joseph
e quindi voglio aggiornare solo l'utente fi primo nome, ma lascia il suo ultimo e mezzo da solo, ho pensato di fare solo:
User.update({email: "[email protected]"}, req.body, function(err, result){});
Ma quando faccio questo, "cancella" le proprietà profile.name.last
e profile.name.middle
e io alla fine con un documento che sembra :
{
"_id" : "5187b74e66ee9af96c39d3d6",
"profile" : {
"name" : {
"first" : "Joseph"
}
}
}
quindi è praticamente sovrascrivere tutti profile
con req.body.profile
, che credo abbia senso. C'è un modo per aggirarlo senza dover essere più esplicito specificando i miei campi nella query di aggiornamento invece di req.body
?
Considera di accettare la risposta di Aichholzer in quanto fornisce una vera soluzione al problema. – zbr