2015-02-27 3 views
0

Привет, У меня возникла проблема с обновлением встроенного массива объектов с помощью mongoose!Mongodb Deep Embedded Object Array Query

Вот схема:

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 не обновляется со значением !!!

Что я здесь делаю?

My Main Scenario - это найти идентификатор (MongoDB) с соответствующим именем gName, а затем обновить его массив расписаний.

Моя находка запрос работает большим, но не может обновить графики ... и события могут быть много

ответ

0

Если я правильно читал вашу схему, основная часть представляет собой массив, содержащий массив, содержащий массив, содержащий массив строк. Я думаю, вы бы намного лучше «инвертировали» схему, чтобы каждый документ представлял событие. Метаданные, группирующие несколько событий, могут быть дублированы в каждом документе события. Пример:

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

Обновление, вы боретесь с сдвигами в прошивке нового документа события в коллекции.