如何使用nodejs保存mongodb中的mutikey数组值

时间:2016-11-09 09:19:04

标签: node.js mongodb

我将此架构用于mulikey数组

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

var ConfigSchema = new Schema({
    aaaa  : String,

    bbbb  : String,



    Stage: [{
        cccc : String,
        dddd : String,
        eeee : String,

    }, {index: true}]

}, { collection: 'Config' });

var ConfigModel = mongoose.model('Config', ConfigSchema);
module.exports = ConfigModel;

我正确地从html页面获取阶段的值。但是在分配值时,存在一些错误,它只存储最后一个阶段。(即,每次for循环运行时它都会覆盖值) 这里是分配值的代码,

 var i = 0;
    for (i = 0; i <= 1; i++) {
        var addConfigModel = new ConfigModel(


            {

                aaaa : objmodel.aaa.value,

                bbbb : objmodel.bbb.value,


                Stage: [{
                      cccc : objmodel.Stage[i].ccc.value,
                      dddd : objmodel.Stage[i].ddd.value,
                      eeee : objmodel.Stage[i].eee.value,
                   }]

            });

    }

存储在mongodb中的cccc,dddd和eeee的值仅是最后的数组编号值。 我的架构有问题吗?如何在mongo中存储每个阶段的值?

1 个答案:

答案 0 :(得分:0)

我不确定你是否正确使用mongodb

  • 在数据库中创建新文档时,使用new ConfigModel()
  • 当您尝试更新现有文档时,请使用find my doc.update()

因此,您每次使用默认值重新创建ConfigModule文档,并在数组中添加最后一个值。

因此,我建议您在以下内容中优化您的代码:

var config = new ConfigModel()
config.aaaa = objmodel.aaa.value
config.bbbb = objmodel.bbb.value
config.Stage = [0, 1].map((i) => {
 return {
   cccc : objmodel.Stage[i].ccc.value,
   dddd : objmodel.Stage[i].ddd.value,
   eeee : objmodel.Stage[i].eee.value,
 }
})
config.save(() => {
 //
})

这将解决问题