Mongodb深嵌入式对象数组查询

时间:2015-02-27 19:03:59

标签: node.js mongodb nosql

您好我在使用mongoose更新嵌入式对象数组时遇到问题!

以下是架构:

var event = {
    eTime : [String]
};

var schedule = {
    events: [event]
};

var group = {
    gName: {type:String},
    sDate:  { type: Date, default: Date.now },
    schedules: [schedule]
}; 

MainSchema {
    id          :   String,
    groups      :   [group]
};

我想要做的是用事件对象更新事件中eTime的数组。我正在使用此查询

db.demoDb.update({
   'id': 'MongoDb', 
   'groups':{
       $elemMatch:{
           'gName':'noSql'
       }
    }
 },
 {
    $push:{
      'groups':{
          'schedules':{
              'events':{
                   'eTime':'01-Marach-15'
               }
           }
       }
    }
  }
)

但是时间表 - > events-> eventTime没有更新值!!!

我在这里做错了什么?

我的主要场景是找到带有关联gName的id(MongoDB),然后更新它的scheduleles数组。

我的查询工作效果很好,但无法更新计划......事件可能很多

1 个答案:

答案 0 :(得分:0)

如果我正确地读取您的架构,核心部分是一个包含数组的数组,该数组包含一个包含字符串数组的数组。我认为你会做得更好"反转"模式,因此每个文档代表一个事件。可以将分组多个事件的元数据复制到每个事件文档中。一个例子:

{
    "event" : "cookie bake-off",
    "gName" : "baking",
    "sDate" : ISODate("2015-03-02T21:46:11.842Z")
}

您正在努力解决的更新转化为在集合中插入新的事件文档。