Node.js 如何使用Mongoose向对象添加字段?
我正在使用MEAN stack构建一个CRUD应用程序,我用一个空对象设置了一个Mongoose模式(冰柜):Node.js 如何使用Mongoose向对象添加字段?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用MEAN stack构建一个CRUD应用程序,我用一个空对象设置了一个Mongoose模式(冰柜): shelves: {} 我正在尝试将其他对象推送到该对象,例如: [shelfname] : {name : [shelfname]} 因此,随着时间的推移,Shelfs对象将类似于: shelves : { shelf1: {name: shelf1}, shelf2: {name: shelf2}, shelf
shelves: {}
我正在尝试将其他对象推送到该对象,例如:
[shelfname] : {name : [shelfname]}
因此,随着时间的推移,Shelfs对象将类似于:
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);
});
我该怎么做呢?我建议您使用一系列子文档作为冷冻柜的货架:
var FreezerModel = new Schema({
shelves: [String]
});
然后使用操作员将货架添加到您的冷冻柜中:
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对象表示法中,键总是被解释为文字,所以如果您想使用变量作为键,则需要使用数组表示法。
对
工具架使用typeMixed
是因为Mongoose在严格模式下限制您访问架构中定义的字段。您还可以对模式选项使用{strict:false}。有关详细信息,请参阅。我尝试了该实现并使其正常工作,但我试图避免使用许多嵌套数组的数组,并且我希望能够基于字段名(而不是数组索引)访问属性@Leif-我已更新了字段解决方案的答案。