mongodb에서 ISODate를 사용한 날짜 쿼리가 작동하지 않는 것 같습니다.
MongoDB에서 작업하기 위한 가장 기본적인 날짜 쿼리조차 얻을 수 없는 것 같습니다.다음과 같은 문서의 경우:
{
"_id" : "foobar/201310",
"ap" : "foobar",
"dt" : ISODate("2013-10-01T00:00:00.000Z"),
"tl" : 375439
}
그리고 다음과 같은 질문입니다.
{
"dt" : {
"$gte" : {
"$date" : "2013-10-01T00:00:00.000Z"
}
}
}
실행 결과 0개의 결과를 얻을 수 있습니다.
db.mycollection.find({
"dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})
이게 왜 안 먹히는지 알아?
참고로 이 쿼리는 Spring의 MongoTemplate에 의해 생성되고 있기 때문에 최종적으로 MongoDB로 전송되는 쿼리는 제가 직접 제어할 수 없습니다.
(P.S.)
> db.version()
2.4.7
감사합니다!
비록 ~일지라도$date
MongoDB Extended JSON의 일부입니다.이것이 디폴트입니다.mongoexport
문의의 일부로 사용할 수 없을 것 같습니다.
를 사용하여 정확한 검색을 시도하면$date
다음과 같습니다.
db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})
에러가 표시됩니다.
error: { "$err" : "invalid operator: $date", "code" : 10068 }
이것을 시험해 보세요.
db.mycollection.find({
"dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})
또는 (@user3805045에 의한 코멘트 표시):
db.mycollection.find({
"dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})
ISODate
또한 (@MattMolnar로 표기) 날짜를 시간 없이 비교해야 할 수도 있습니다.
mongo shell의 데이터 유형에 따르면 둘 다 같아야 합니다.
mongo 셸은 날짜를 문자열 또는 날짜 개체로 반환하는 다양한 메서드를 제공합니다.
- 현재 날짜를 문자열로 반환하는 Date() 메서드.
- ISODate() 래퍼를 사용하여 Date 개체를 반환하는 새로운 Date() 컨스트럭터.
- ISODate() 컨스트럭터:ISODate() 래퍼를 사용하여 Date 개체를 반환합니다.
및 사용ISODate
는 계속 날짜 개체를 반환합니다.
{"$date": "ISO-8601 string"}
는 엄밀한 JSON 표현이 필요한 경우에 사용할 수 있습니다.한 가지 예로 Hadoop 커넥터를 들 수 있습니다.
MongoDB 요리책 페이지 댓글:
"dt" :
{
"$gte" : ISODate("2014-07-02T00:00:00Z"),
"$lt" : ISODate("2014-07-03T00:00:00Z")
}
이건 나한테 효과가 있었어.전체 컨텍스트에서 다음 명령어는 모든 레코드를 가져옵니다.dt
date 필드에는 2013-10-01(YYY-MM-DD) Zulu 날짜가 있습니다.
db.mycollection.find({ "dt" : { "$gte" : ISODate("2013-10-01T00:00:00Z"), "$lt" : ISODate("2013-10-02T00:00:00Z") }})
이것을 시험해 보세요.
{ "dt" : { "$gte" : ISODate("2013-10-01") } }
mongodb 클라이언트의 gui로 robomongo를 사용하고 있으며, 아래는 나에게 효과가 있었습니다.
db.collectionName.find({"columnWithDateTime" : {
$lt:new ISODate("2016-02-28T00:00:00.000Z")}})
nodejs 기반 드라이버 mongodb(v1.4.3)를 사용하고 있는 어플리케이션 측에서는 YYY-mm-dd와 같은 날짜를 제공하는 UI에서 datepicker를 사용하고 있습니다.그러면 00:00:00:00와 같은 기본 시간이 부가되어 다음에 에 할당됩니다.new Date()
컨스트럭터와 mongodb criteria 객체에 공급됩니다.드라이버가 날짜를 ISO 날짜로 변환하고 쿼리가 작동하며 원하는 출력을 제공하지만, 같은 경우new Date()
컨스트럭터는 동일한 기준에 대해 로보 몽고에서 동작하거나 동일한 출력을 보여주지 않습니다. 이상하게도 로보 몽고를 사용하여 기준 객체를 교차 검사했습니다.
, mongoshell은 CLI mongoshell과 할 수 있습니다.ISODate
★★★★★★★★★★★★★★★★★」new Date()
json strict 모드에서는 다음 순서를 유지해야 합니다.
{
"dt": {
"$gte": {
"$date": "2013-10-01T00:00:00.000Z"
}
}
}
mlab.com에서 검색 쿼리를 정의하는 데 도움이 되는 유일한 방법.
이것은 나의 문서이다.
"_id" : ObjectId("590173023c488e9a48e903d6"),
"updatedAt" : ISODate("2017-04-27T04:26:42.709Z"),
"createdAt" : ISODate("2017-04-27T04:26:42.709Z"),
"flightId" : "590170f97cb84116075e2680",
"_id" : ObjectId("590173023c488e9a48e903d6"),
"updatedAt" : ISODate("2017-04-28T03:26:42.609Z"),
"createdAt" : ISODate("2017-04-28T03:26:42.609Z"),
"flightId" : "590170f97cb84116075e2680",
이제 나는 27번째 날짜 document.so를 찾고 싶어. 나는 이것을 사용했어...
> db.users.find({createdAt:{"$gte":ISODate("2017-04-27T00:00:00Z"),"$lt":ISODate("2017-04-28T00:00:00Z") }}).count()
result:1
이건 나한테 효과가 있었어요.
포장 wrap wrap wrap wrap new Date()
:
{ "dt" : { "$lt" : new Date("2012-01-01T15:00:00.000Z") } }
오래된 질문이지만, 여전히 구글이 처음 히트했기 때문에 다시 쉽게 찾을 수 있도록 여기에 올립니다.
Mongo 4.2 및 aggregate()를 사용하는 경우:
db.collection.aggregate(
[
{ $match: { "end_time": { "$gt": ISODate("2020-01-01T00:00:00.000Z") } } },
{ $project: {
"end_day": { $dateFromParts: { 'year' : {$year:"$end_time"}, 'month' : {$month:"$end_time"}, 'day': {$dayOfMonth:"$end_time"}, 'hour' : 0 } }
}},
{$group:{
_id: "$end_day",
"count":{$sum:1},
}}
]
)
이것은 그룹별 변수를 날짜로 제공하며, 때로는 구성 요소 자체로도 사용하는 것이 좋습니다.
MongoDB 쉘:
db.getCollection('sensorevents').find({from:{$gt: new ISODate('2015-08-30 16:50:24.481Z')}})
내 노드에서는JS 코드(Mongoose 사용)
SensorEvent.Model.find( {
from: { $gt: new Date( SensorEventListener.lastSeenSensorFrom ) }
} )
'from' 필드가 지정된 날짜보다 큰 값을 반환하기 위해 센서 이벤트 컬렉션을 쿼리하고 있습니다.
지금보다 작거나 같은 가치를 찾는 동안 이 방법이 효과가 있었습니다.
db.collectionName.find({ "dt": { "$lte" : new Date() + "" } });
4 와 비교해서 만, AWS DocumentDB(Mongo 4 호환)를 .Date
★★★★★★★★★★★★★★★★★」ISODate
:
db.collection_name.find({"an_iso_date_field": {$lte: "2021-02-04T03:42:00Z"}})
언급URL : https://stackoverflow.com/questions/19819870/date-query-with-isodate-in-mongodb-doesnt-seem-to-work
'programing' 카테고리의 다른 글
Ajax를 사용하여 어레이를 PHP 스크립트로 전송 (0) | 2023.03.11 |
---|---|
Angularjs는 로컬 json 파일에 액세스합니다. (0) | 2023.03.11 |
"True"(JSON)를 Python 등가 "True"(참)로 변환 (0) | 2023.03.11 |
AngularJS가 개발 시스템에서 부분 캐시를 사용하지 않도록 설정함 (0) | 2023.03.11 |
모서리가 있는 석공JS (0) | 2023.03.11 |