是否可以使用Mongoose一次性在(子)文檔上設置多個屬性?什麼我想一個例子做:使用nodejs/mongoose部分更新子文檔
比方說,我有這樣的模式:
var subSchema = new Schema({
someField: String,
someOtherField: String
});
var parentSchema = new Schema({
fieldOne: String,
subDocs: [subSchema]
})
然後,我想這樣做:
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);
});
};
通常情況下,我可以使用做到這一點$set
運算符,但我的問題是document
在這個示例中是parentDoc
的子文檔(嵌入模式)。所以,當我試圖做
Parent.update({_id: parentDoc._id, "subDocs._id": document._id},
{$set: {"subDocs.$" : partialUpdate}},
function(err, numAffected) {});
它換成subDocs._id
確定的子文檔實例。目前我通過手動設置字段來「解決」它,但我希望有一個更好的方法來做到這一點。
是的,我沒有這樣做第一。但我希望我不必這樣做。 – NilsH 2013-04-08 14:18:53
接受這一點,因爲它似乎是唯一的方法。在這種情況下,是否需要'hasOwnProperty'檢查,或者這是不需要的,因爲它是來自請求主體的普通JSON對象? – NilsH 2013-04-09 07:36:20
循環屬性的稍微好一點的方法可能是使用Object.keys,因爲它只包含「自己的屬性」(儘管可能不會有任何其他屬性)。 – NilsH 2013-04-09 11:36:49