Обновить конкретное поле в mongodb всех документов со ссылкой на его текущее значение - PullRequest
0 голосов
/ 23 сентября 2018

В моей коллекции mongodb все документы хранятся в поле «TimeStamp» в формате «MM-DD-YYYY», которое хранится в виде строки.Я хочу обновить это выходное поле TimeStamp до формата «DD-MM-YYYY» во всех документах.Может кто-нибудь помочь мне написать запрос для этого.

Пример У меня есть документы, как показано ниже

{
  "id" : "1",
  "TimeStamp" : "09-22-2018"
},
{
  "id" : "2",
  "TimeStamp" : "09-23-2018"
}

Я хочу обновить их до

{
  "id" : "1",
  "TimeStamp" : "22-09-2018"
},
{
  "id" : "2",
  "TimeStamp" : "23-09-2018"
}

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Вы можете перебрать все документы и переформатировать метку времени следующим образом:

function reformat(date) { 
  var parts = date.split('-'); 
  return parts[1]+'-'+parts[0]+'-'+parts[2]; 
}

db.collection.find({TimeStamp : {$exists: true}}).snapshot().forEach(
 function (doc) { 
   db.collection.update( 
     { _id: doc._id }, 
     { $set: { TimeStamp: reformat(doc.TimeStamp) }}
   ); 
 }
);
0 голосов
/ 23 сентября 2018

Вы можете попробовать ниже $out агрегация

db.collection.aggregate([
  { "$addFields": {
    "TimeStamp": {
      "$dateToString": {
        "format": "%d-%m-%Y",
        "date": { "$dateFromString": { "dateString": "$TimeStamp", "format": "%m-%d-%Y" }}
      }
    }
  }},
  { "$out": "collection_name" }
])
...