我正在使用MEAN堆栈构建一个CRUD应用程序,并且我设置了一个带有空对象的Mongoose模式(Freezer):
shelves: {}
我正在尝试将其他对象推送到此对象,例如:
[shelfname] : {name : [shelfname]}
因此,随着时间的推移,货架对象将类似于:
shelves : {
shelf1: {name: shelf1},
shelf2: {name: shelf2},
shelf3: {name: shelf3},
}
我正在尝试以下代码并且它无法正常工作:
var shelf = req.body.shelf
console.log(shelf);
var shelfname = req.body.shelf.shelfname;
var conditions = {_id : req.body._id};
var update = {$set: {shelfname : shelfname}};
Freezer.update(conditions, update, function(err,freezer){
console.log(freezer);
});
我将如何做到这一点?
答案 0 :(得分:0)
我建议您使用一系列子文档来存放冰箱:
var FreezerModel = new Schema({
shelves: [String]
});
然后使用$push
运算符将货架添加到冰箱:
var shelf = req.body.shelf,
id = req.body._id;
Freezer.update({_id: id}, {$push: {shelves: shelf}}, function(err, freezer) {
console.log(freezer);
});
如果你想坚持使用对象而不是数组,我建议你使用数组表示法修改字段:
var FreezerModel = new Schema({
shelves: Schema.Types.Mixed
});
var update = {$set: {}};
update['$set']['shelves.'+shelfname] = shelfname;
这是因为在js对象表示法中,键总是被解释为文字,因此如果要将变量用于键,则需要使用数组表示法。
对Mixed
使用shelves
类型是由于严格模式下的Mongoose将您限制在架构中定义的字段。您还可以使用{strict:false}作为架构选项。有关详细信息,请参阅this issue。