IT

mongo 콘솔에서 날짜 필드를 업데이트하는 방법은 무엇입니까?

itgroup 2023. 5. 18. 20:57
반응형

mongo 콘솔에서 날짜 필드를 업데이트하는 방법은 무엇입니까?

예를 들어 모든 레코드를 '2012-01-01'("time" : ISODate("2011-12-31T13:52:40Z")로 업데이트하고자 합니다.

db.test.update( { time : '2012-01-01' }, false, true  )

반환 오류:

Assert failed : need an object
Error("Printing Stack Trace")@:0
()@shell/utils.js:35
("assert failed : need an object")@shell/utils.js:46
(false,"need an object")@shell/utils.js:54
([object Object],false,true)@shell/collection.js:189
@(shell):1

Wed Jan 11 17:52:35 uncaught exception: assert failed : need an object

새 항목을 생성해야 합니다.ISODate다음과 같은 개체:

db.test.insert({"Time" : new ISODate("2012-01-10") });

이는 업데이트 및 쿼리 모두에 해당됩니다.쿼리 구문이 올바르지 않습니다. 이 구문은 다음과(와야 합니다.

db.test.update({ criteria }, { newObj }, upsert, multi);

예를 들어, 모든 개체를 업데이트하려면

db.test.update( {}, { $set : { "time" : new ISODate("2012-01-11T03:34:54Z") } }, true, true);

또한 이는 다음과 매우 다르다는 점에 유의하십시오.

db.test.update( {}, { "time" : new ISODate("2012-01-11T03:34:54Z") }, true, false);

기존 문서에 새 필드를 추가하거나 기존 필드를 업데이트하는 대신 후자가 오브젝트를 대체하기 때문입니다.이 예에서 마지막 매개 변수를 다음으로 변경했습니다.false다중 업데이트는 다음과 함께만 작동하기 때문입니다.$연산자

기존 날짜 필드(MySQL 형식 'yyyyy-mm-dd' f.e.에서 가져온)를 ISODate로 변환해야 하는 경우 다음 방법으로 문서를 루프할 수 있습니다.

/usr/bin/mongo yourdbname --eval "db.yourcollectionname.find().forEach(function(doc){doc.yourdatefield = new ISODate(doc.yourdatefield);db.yourcollectionname.save(doc)});"

ISO 날짜를 생성하여 이전 방식으로 이 작업을 수행할 수 있습니다.

  db.test.update({_id : 1}, {
      $set : {
         "time" : new ISODate("your current date")
      }
  });

하지만 새로운 기능을 사용할 경우에Mongo 2.6$currentDate를 사용하면 날짜를 현재 날짜로 매우 쉽게 업데이트할 수 있습니다.

db.test.update( { _id: 1 }, {
  $currentDate: {
      time: true,
  },
})

언급URL : https://stackoverflow.com/questions/8821206/how-to-update-date-field-in-mongo-console

반응형