我需要动态地将一个字段推送到我的数据库的对象“选项”。我使用Mongoose v.4.13.11。
我的架构
module.exports = mongoose.model('Model',
{
...
options: Object
});
我在NodeJs中的后端 - 没有工作但在控制台日志中我有理想的结果:
controller.addingModels = (req, res) => {
Model.findById(req.body._id).exec((err, model) => {
model.options[req.body.name] = req.body.myvalue;
model.set({
options : model.options
});
console.log(model.options);
model.save();
});
};
控制台日志的输出是:
{ Maria : 25, John : 20, Perry : 31 }
但它没有在我的数据库中更新。 这里奇怪的是,当我手动添加值(见下文)时,它可以工作,数据库会执行更新并将其识别为对象:
model.set({
options : { Maria : 25, John : 20, Perry : 31 }
});
为了动态工作,我该怎么办?如果您需要更多信息,请不要犹豫,问我。
答案 0 :(得分:2)
您可以使用$set
运算符。设置{new: true}
将返回修改后的文档。
model.options = {your new values}
Model.findByIdAndUpdate(req.body._id,{$set: {options : model.options}}, {new: true}, function(err, updatedDocument){
console.log(updatedDocument);
model.save();
});
答案 1 :(得分:0)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
尝试像这样定义Schema, 考虑我想将动态字段添加到元对象。我可以这样做。
var blogSchema = new Schema({
title: String,
meta: {}
});
blogsSchema.find(req.body._id).exec((err, blogData) => {
blogData[0].meta[req.body.name] = req.body.myvalue;
console.log(blogData[0].meta);
blogData[0].save();
});