2014-09-11 3 views
0

У меня есть структура DOC как:редактирование элемента массива во всех Документах MongoDB

{ 
_id: "fe50fdee-4ea3-4824-94af-f369633c0c7a", 
_class: "com.tracking.daoservice.model.TrackingData", 
modified: ISODate("2014-09-10T23:38:48.407Z"), 
eventtype: "William-Test", 
eventdata: { 
    QueryDate: "01-APR-2014", 
    SearchQuery: { 
     keyword: "Java", 
     location: "Santa Clara, CA", 
     Facet: "skill~java~perl|workAuth~USC", 
     SearchAgentId: "4299" 
    }, 
    Viewed: [ 
     { 
      ViewedID: "8992ade400a", 
      Dockey: "3323aba3233", 
      PID: "32399a", 
      actionsTaken: "email|direct message|report seeker", 
      viewDate: "01-APR-2014", 
      MessageSent: "true", 
      Message: [ 
       { 
        MessageID: "123aca323", 
        Delivered: "True", 
        Opened: "True", 
        ClickThroughRate: "NotBad", 
        MessageDate: "02-APR-2014", 
        Response: [ 
         { 
          ResponseId: "a323a9da", 
          ResponseDate: "23-APR-2014" 
         } 
        ] 
       } 
      ] 
     } 
    ] 
}, 
eventsource: "API-Dev Test - JMachine", 
sourceip: "myIp", 
entityid: "TmoneyBunnyWunny", 
groupid: "Dice", 
datecreated: ISODate("2014-09-10T23:38:48.405Z") 
} 

мне нужно изменить значение даты, такие как viewDate: "01-APR-2014" я пытался написать запрос для этого.

db.TRACKING_DATA.find().forEach(function(doc) {  db.TRACKING_DATA.update(  { "_id": doc._id },   { "$set": {    "eventdata.Viewed.$.viewDate": new Date(doc.eventdata.Viewed.viewDate)   }} ) }); 

Однако это возвращает, однако никаких изменений в документе нет. Я использовал $, поскольку в массиве есть только один элемент.

Я пропустил что-то простое здесь?

Приветствия

ответ

1

Я заметил, что ваш eventdata.Querydata такой же, как Viewed.viewddate в этом случае ниже запрос будет обновлять данные

db.TRACKING_DATA.find().forEach(function(doc) { db.TRACKING_DATA.update({ "_id": doc._id ,"eventdata.Viewed.viewDate":doc.eventdata.QueryDate},   { "$set": {    "eventdata.Viewed.$.viewDate": new Date(doc.eventdata.Viewed[0].viewDate)   }} ) }); 

или вы можете использовать этот запрос

db.TRACKING_DATA.find().forEach(function(doc) { db.TRACKING_DATA.update({ "_id": doc._id ,"eventdata.Viewed.viewDate":doc.eventdata.Viewed[0].viewDate},   { "$set": {    "eventdata.Viewed.$.viewDate": new Date(doc.eventdata.Viewed[0].viewDate)   }} ) }); 
+0

Спасибо за ответ! Если бы я хотел отредактировать массив в массиве, например MessageDate. db.TRACKING_DATA.find(). forEach (function (doc) {db.TRACKING_DATA.update ({"_id": doc._id, "eventdata.Viewed.Message.MessageDate": doc.eventdata.Viewed [0] .Message [0] .MessageDate}, {"$ set": {"eventdata.Viewed. $. Message. $. MessageDate": new Date (doc.eventdata.Viewed [0] .Message [0] .MessageDate)}}) }); ничего не делает. (извините, не знаю, как указать код в комментариях) – Will

+1

Используйте это- db.TRACKING_DATA.find(). forEach (function (doc) {db.TRACKING_DATA.update ({"_id": doc._id, "eventdata .Viewed.viewDate ": doc.eventdata.Viewed [0] .viewDate}, {" $ set ": {" eventdata.Viewed. $. Message.0.MessageDate ": новая дата (doc.eventdata.Viewed [0] .Message [0] .MessageDate)}})}); – mallik

+0

вы чемпионом, если бы я мог вас дважды удвоить, я бы – Will

Смежные вопросы