Czy można za jednym zamachem ustawić wiele właściwości na (pod) dokumencie z Mongoose? Przykładem tego, co próbuję zrobić:Częściowa aktualizacja subdokumentu z nodejs/mangustą
Powiedzmy mam ten schemat:
var subSchema = new Schema({
someField: String,
someOtherField: String
});
var parentSchema = new Schema({
fieldOne: String,
subDocs: [subSchema]
})
to chciałbym zrobić:
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);
});
};
Normalnie, można to osiągnąć za pomocą operator $set
, ale moim problemem jest to, że document
w tym przykładzie jest dokumentem podrzędnym (osadzonym schematem) z parentDoc
. kiedy więc starałem się zrobić
Parent.update({_id: parentDoc._id, "subDocs._id": document._id},
{$set: {"subDocs.$" : partialUpdate}},
function(err, numAffected) {});
zastąpiła dokument podrzędny instancji zidentyfikowany przez subDocs._id
. Obecnie "rozwiązałem" go ręcznie, ustawiając tylko pola, ale miałem nadzieję na lepszy sposób.
Tak, ja zrobiłem, że w pierwszej kolejności. Miałem jednak nadzieję, że nie muszę tego robić. – NilsH
Zaakceptowanie tego, ponieważ wydaje się, że jest to jedyny sposób, aby to zrobić. W takim przypadku czy istnieje potrzeba sprawdzenia 'hasOwnProperty', czy nie jest to konieczne, ponieważ jest to zwykły obiekt JSON z treści żądania? – NilsH
Nieco lepszym sposobem na zapętlenie właściwości może być użycie 'Object.keys', ponieważ zawiera ona tylko" własne właściwości "(chociaż prawdopodobnie nie będzie żadnych innych właściwości). – NilsH