È possibile impostare più proprietà su un (sotto) documento in una volta sola con Mangusta? Un esempio di quello che sto cercando di fare:Aggiornamento parziale di un documento secondario con nodejs/mangusta
Diciamo che ho questo schema:
var subSchema = new Schema({
someField: String,
someOtherField: String
});
var parentSchema = new Schema({
fieldOne: String,
subDocs: [subSchema]
})
Poi vorrei fare:
exports.updateMyDocument = function(req, res) {
var parentDoc = req.parentDoc; // The parent document. Set by parameter resolver.
var document = req.myDoc; // Sub document of parent. Set by parameter resolver.
var partialUpdate = req.body; // updated fields sent as json and parsed by body parser
// I know that the statement below doesn't work, it's just an example of what I would like to do.
// Updating only the fields supplied in "partialUpdate" on the document
document.update(partialUpdate);
parentDoc.save(function(err) {
if(err) {
res.send(500);
return;
}
res.send(204);
});
};
Normalmente, ho potuto ottenere questo utilizzando l'operatore $set
, ma il mio problema è che document
in questo esempio è un documento secondario (schema incorporato) di parentDoc
. Così, quando ho provato a fare
Parent.update({_id: parentDoc._id, "subDocs._id": document._id},
{$set: {"subDocs.$" : partialUpdate}},
function(err, numAffected) {});
ha sostituito l'istanza documento secondario identificato da subDocs._id
. Attualmente ho "risolto" impostando solo i campi manualmente, ma speravo in un modo migliore per farlo.
Sì, l'ho fatto prima. Ma speravo di non doverlo fare. – NilsH
Accettando questo, poiché sembra essere l'unico modo per farlo. In questo caso, c'è bisogno di un controllo 'hasOwnProperty', o non è necessario poiché è un oggetto JSON normale dal corpo della richiesta? – NilsH
Un modo leggermente migliore per eseguire il loop delle proprietà potrebbe essere l'uso di 'Object.keys', poiché includerà solo" proprietà proprie "(anche se probabilmente non ci saranno altre proprietà). – NilsH