Node.js 如何使用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

我正在使用MEAN stack构建一个CRUD应用程序,我用一个空对象设置了一个Mongoose模式(冰柜):

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对象表示法中,键总是被解释为文字,所以如果您想使用变量作为键,则需要使用数组表示法。
工具架使用type
Mixed
是因为Mongoose在严格模式下限制您访问架构中定义的字段。您还可以对模式选项使用{strict:false}。有关详细信息,请参阅。

我尝试了该实现并使其正常工作,但我试图避免使用许多嵌套数组的数组,并且我希望能够基于字段名(而不是数组索引)访问属性@Leif-我已更新了字段解决方案的答案。