Mongoose - 更新文档,添加新密钥(严格:false)

时间:2016-02-22 18:51:03

标签: node.js mongodb mongoose mongoose-schema

我有以下猫鼬模型:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var companySchema = new mongoose.Schema({
    name: String, 
    long_name: String,
    address: String,
    telephone: String,
    mobile_phone: String,
    fax: String,
    email: String,
    url: String,
    config:{
        language: String,
        account: String
    },
    items:[{
        name: String,
        internal_id: String,
        reference_code: String,
        description: String
    }]
},{ timestamps: true, strict: false });

var Company = mongoose.model('Company', companySchema);

module.exports = Company;

好的想法是让每个用户在items数组中插入自己的字段。例如,用户将创建具有多个新键/值对的新项。我将把新项目存储在items数组中:

var Company = require('mongoose').model('Company');

exports.createItem = function(req, res, next) {

        var newitem = {
            "name": "Syringe Needels",
            "internal_id": "ID00051",
            "reference_code": "9506",
            "description": "My description",
            "batch": "100",
            "room": "240",
            "barcode": "9201548121136"
        };


      Company.findById(req.company, function(error, company) {
           company.items.push(newitem);
           company.save(function(err, doc){
            return res.status(200).send('The new item has been stored!');
          });

      });
};

架构中未定义的键不是存储;只存储name,internal_id,reference_code和description。

我怎么能实现它?

1 个答案:

答案 0 :(得分:2)

您可以创建一个数据类型为混合对象的子文档。这将允许您动态插入/更新密钥

var companySchema = new mongoose.Schema ({
    name: String, 
    long_name: String,
    address: String,
    telephone: String,
    mobile_phone: String,
    otherProps : {}
})

这个(otherProps键)将完成任务