MongoDB 시간 없이 날짜만 비교
MongoDB의 날짜 필드를 시간이 아닌 날짜로만 쿼리하려면 어떻게 해야 합니까?예를 들어 MongoDB에서 2015년 7월 7일을 언제든지 저장할 경우 해당 날짜만 오늘 날짜와 일치시키고 싶습니다.
MySQL에서, 나는 할 것입니다.SELECT col1, col2 FROM table WHERE DATE(date_field) = DATE(NOW());
MySQL에는 일치하는 동안에만 date_field를 날짜로 변경하는 기능이 있습니다.MongoDB에서도 매칭 중에 비슷한 기능으로 할 수 있나요?맘에 들다Collection.find({ dateonly(datetimefield): dateonly(new Date() });
아니면 비슷한 것들?
저는 Mongo가 GMT에 날짜/시간을 저장하는 것을 이해하기 때문에 날짜만 일치시키기 전에 저장된 GMT date+time을 GMT에서 Local로 변환해야 하지만, 시작하려면 날짜 일치 시간을 제거할 수 있는지 알고 싶습니다.예를 들어, 지금 GMT가 7월 8일 03:00이지만 미국 동부 표준시가 7월 7일 23:00이라면 7월 7일과 일치하고 싶습니다.
하루의 시작과 끝 사이에 범위 쿼리를 만들어야 할 것 같습니다(또는 오늘을 말하는 경우 종료하지 않고).이런 거.
db.collection.find({
"date" : {"$gte": new Date("2015-07-07T00:00:00.000Z"),
"$lt": new Date("2015-07-08T00:00:00.000Z")}
})
지정된 형식에서 날짜를 문자열로 추출하고 집계 피필린을 사용하여 해당 형식의 날짜와 비교할 수 있습니다.
$addFields: { "creationDate": {$dateToString:{format: "%Y-%m-%d", date: "$createdAt"}}}},
{$match : { creationDate: {$eq: req.query.date}}
$expr로 가능합니다.
{ $expr: {$eq: ["2021-03-29", { $dateToString: {date: "$dateField", format: "%Y-%m-%d"}}]}}
새로운 날짜() 대신 모멘트()를 사용하도록 코드를 수정했습니다.
MomentJS Timezone(http://momentjs.com/timezone/) 을 사용하여 로컬 날짜/시간을 날짜 전용 숫자 필드로 변환한 후 날짜를 숫자로 저장합니다.
my javascript code(MongoDB 외부)에서:
var localDateOnly = function(timezone, d) {
if (d == undefined) { d = new Date(); } // current date/time
return Number( moment(d).tz(timezone).format("YYYYMMDD") );
}
그런 다음 Mongo 레코드에 날짜 전용 필드를 저장합니다.
var myDate = localDateOnly("America/New_York"); // today, in YYYYMMDD number
db.birthdays.insert(
{ dateonly: myDate, event: "This day is my birthday!" }
);
그러면 나의 자바스크립트 코드에서 오늘, 내일, 특정 요일 등을 쉽게 조회할 수 있습니다.
// today
var myDate = localDateOnly("America/New_York");
db.birthdays.find( { dateonly: myDate } );
// tomorrow
var myDate = localDateOnly(
"America/New_York",
moment().add( 1, "days" )
); // tomorrow
db.birthdays.find( { dateonly: myDate } );
// someone wants to know birthdays on the calendar on July 15, 2015,
// no timezone math needed, just type the date in YYYYMMDD format
db.birthdays.find( { dateonly: 20150715 } );
이것이 누군가에게 도움이 되기를 바랍니다.성능 및 유효성 확인을 위해 숫자로 저장하기로 결정했습니다.삽입하기 전에 모멘트 패키지를 사용하여 유효한 날짜를 확인합니다.
moment( 20150715, "YYYYMMDD", true ).isValid() // returns true & allowed to store in the database
moment( 150715, "YYYYMMDD", true ).isValid() // returns false, don't insert into db
코드는 날짜를 나타내는 정수를 저장할 때 더 깔끔했으며, 몽고가 범위를 쉽게 찾을 수 있도록 했습니다.예를 들어, 2015년에 생일을 찾는 것은{"$gte": 20150101, "$lte": 20151231}
또는{"$gte": 20150000, "$lte": 20159999}
.
이것이 제가 제안한 솔루션입니다.
db.collection.find({
$and: [
{"date": {$gte: new Date("2015-07-07T00:00:00.000Z")}},
{"date": {$lt: new Date("2015-07-08T00:00:00.000Z")}}
]
})
Crash_Override와 Maxim의 답변을 조합하여 작성했습니다.폰티 우셴코.Moment.js 및 $gt, $lt mongo 연산자를 사용합니다.
ship_date: {
$lt: moment().hours(0).minutes(0).seconds(0).milliseconds(0).add(28, "days").toDate(),
$gte: moment().hours(0).minutes(0).seconds(0).milliseconds(0).toDate()
}
언급URL : https://stackoverflow.com/questions/31272471/mongodb-comparing-dates-only-without-times
'programing' 카테고리의 다른 글
텍스트의 하위 문자열을 얻는 방법? (0) | 2023.07.09 |
---|---|
ISIN을 사용한 Bloomberg BDH 기능 (0) | 2023.07.09 |
pymongo를 사용하여 mongodb에서 쿼리 날짜를 만드는 방법은 무엇입니까? (0) | 2023.07.04 |
MongoDB Embedded Objects에 ID(null 값)가 없습니다. (0) | 2023.07.04 |
Pyodbc Connection 개체를 팬더와 함께 사용할 때 경고 표시 (0) | 2023.07.04 |