2016-01-15 3 views
2

У меня около 40 документов в моей коллекции. Мне нужно обновить некоторые элементы в двух массивах. Массивы документа выглядитКак обновить массив в MongoDB?

"array1": [ 
    { 
     "id" : "2030170", 
     "date1" : ISODate("2016-01-04T07:10:00.000Z"), 
     "date2" : ISODate("2016-01-04T08:00:00.000Z") 
    } 
], 
"array2": [ 
    { 
     "Id" : "43463565", 
     "date1" : ISODate("2016-01-04T07:10:00.000Z"), 
     "date2" : ISODate("2016-01-04T08:00:00.000Z") 
    } 
    ] 

Как обновить поля date1 и дата 2 в обоих массивах?

Я использую скрипт java для обновления других данных. Похоже

db.getCollection('my.collec').update({ "myId" : { $gte: 293, $lte: 438}}, 
              { 

              "$currentDate": { "time1": true }, 
              "$set": { 
              "time2": true, 
              "time3": true 

              } 
              }, { multi: true } 
             ) 

Я пытался так:

db.getCollection('my.collec').update({ "myId" : { $gte: 293, $lte: 438}}, 
               { 

               "$currentDate": { "time1": true }, 
               "$set": { 
               "time2": true, 
               "time3": true, 

           "array1.0.date1": true, 
           "array1.0.date2": true, 
           "array2.0.date1": true, 
           "array2.0.date2": true 
               } 
               }, { multi: true } 
              ) 

Но вместо CurrentDate я получаю «истинный». С такими переменными, как время, все работает нормально.

ответ

0

Мне интересно, почему все документы не в одном массиве? В любом случае попробуйте:

db.YOURCOLLECTION.update(

{$and: [ 
    { date1: {$lt: $currentDate}}, 
    { date2: {$lt: $currentDate}} 
    ] 
}, 

{ 
date1 : $currentDate, 
date2 : $currentDate 
}, 

{upsert: true} 
) 

Edit: одна вещь, которую я заметил $ CurrentDate Я не думаю, что преобразует в ISO автоматически, поэтому вам нужно будет либо явно ввести желаемое штамп времени (в вышеприведенном джентльмена) замена $ CurrentDate с этим значением в ISO в выражении выше или использовать библиотеку преобразования.

См: https://docs.mongodb.org/manual/reference/operator/update/currentDate/

0

мне нужно обновить некоторые элементы в некоторых массивах

было бы приятно знать, что критерием является

Как обновить поля date1 и дата 2 в обоих массивах, так что эти поля не будут добавлены к объектам, которые их не имеют?

Предполагая, что вы только обновление array1 и массив2 первый элемент

db.josef.update({ 
    "array1": { 
     $size: 1 
    }, 
    "array2": { 
     $size: 1 
    } 
}, 
{ 
    $set: { 
     "array1.0.date1": ISODate("2011-01-01T00:00:00.0000Z"), 
     "array1.0.date2": ISODate("2011-01-01T00:00:00.0000Z"), 
     "array2.0.date1": ISODate("2011-01-01T00:00:00.0000Z"), 
     "array2.0.date2": ISODate("2011-01-01T00:00:00.0000Z") 
    } 
}, 
{ 
    multi: true 
}) 

Как я могу обновить поля date1 и дата 2 в обоих массивах таким образом, что эти поля не будут добавлены к объектам, их нет?

upsert является ошибочным по умолчанию, поэтому он не будет добавлен.

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