날짜를 기준으로 쿼리를 반환
mongodb에 이와 같은 데이터가 있습니다.
{
"latitude" : "",
"longitude" : "",
"course" : "",
"battery" : "0",
"imei" : "0",
"altitude" : "F:3.82V",
"mcc" : "07",
"mnc" : "007B",
"lac" : "2A83",
"_id" : ObjectId("4f0eb2c406ab6a9d4d000003"),
"createdAt" : ISODate("2012-01-12T20:15:31Z")
}
db.gpsdatas.find({'createdAt': ??what here??})
위의 데이터 결과를 db에서 나에게 반환하도록 어떻게 쿼리 합니까?
주어진 날짜 이후에 만들어진 모든 항목과 같이 범위 쿼리를 원할 수 있습니다.
db.gpsdatas.find({"createdAt" : { $gte : new ISODate("2012-01-12T20:15:31Z") }});
내가 사용하고 $gte
이 종종 시간 구성 요소 00:00:00 날짜 만 쿼리에 사용되기 때문에, (보다 크거나 같음).
다른 날짜와 동일한 날짜를 찾으려면 구문은 다음과 같습니다.
db.gpsdatas.find({"createdAt" : new ISODate("2012-01-12T20:15:31Z") });
해당 날짜의 모든 항목을 가져 오려면 두 날짜를 비교해야합니다.
하루의 시작과 끝을 얻기 위해 이와 같이 첫 번째 날짜로부터 두 개의 날짜를 만들 수 있습니다.
var startDate = new Date(); // this is the starting date that looks like ISODate("2014-10-03T04:00:00.188Z")
startDate.setSeconds(0);
startDate.setHours(0);
startDate.setMinutes(0);
var dateMidnight = new Date(startDate);
dateMidnight.setHours(23);
dateMidnight.setMinutes(59);
dateMidnight.setSeconds(59);
### MONGO QUERY
var query = {
inserted_at: {
$gt:morning,
$lt:dateScrapedMidnight
}
};
//MORNING: Sun Oct 12 2014 00:00:00 GMT-0400 (EDT)
//MIDNIGHT: Sun Oct 12 2014 23:59:59 GMT-0400 (EDT)
Node v0.12.7 및 v4.4.4를 사용하여 Mongo v3.2.3에서 비슷한 것을 구현하고 다음을 사용했습니다.
{ $gte: new Date(dateVar).toISOString() }
ISODate (예 : 2016-04-22T00 : 00 : 00Z)를 전달하고 있으며 toISOString 함수가 있거나없는 .find () 쿼리에서 작동합니다. 그러나 .aggregate () $ match 쿼리에서 사용할 때는 toISOString 함수가 마음에 들지 않습니다!
지난 5 분 동안 모든 새로운 것을 얻으려면 계산을해야하지만 어렵지는 않습니다 ...
먼저 일치시킬 속성에 대한 인덱스를 만듭니다 (내림차순으로 정렬 방향 -1, 오름차순으로 1 포함)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
그런 다음 마지막 5 분 (60 초 * 5 분) 동안 생성 된 문서를 쿼리하십시오 .getTime()
.javascript의 new Date()
생성자 는 생성자 에 대한 입력으로 사용하기 전에 1000 단위로 밀리 초를 반환해야하기 때문 입니다.
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
설명 new Date(new Date().getTime()-60*5*1000).toISOString()
은 다음과 같습니다.
먼저 "5 분 전"을 계산합니다.
new Date().getTime()
현재 시간을 밀리 초 단위로 제공- We want to subtract 5 minutes (in ms) from that:
5*60*1000
-- I just multiply by60
seconds so its easy to change. I can just change5
to120
if I want 2 hours (120 minutes). new Date().getTime()-60*5*1000
gives us1484383878676
(5 minutes ago in ms)
Now we need to feed that into a new Date()
constructor to get the ISO string format required by MongoDB timestamps.
{ $gte: new Date(resultFromAbove).toISOString() }
(mongodb .find() query)- Since we can't have variables we do it all in one shot:
new Date(new Date().getTime()-60*5*1000)
- ...then convert to ISO string:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
gives us2017-01-14T08:53:17.586Z
Of course this is a little easier with variables if you're using the node-mongodb-native driver, but this works in the mongo shell which is what I usually use to check things.
You can also try:
{
"dateProp": { $gt: new Date('06/15/2016').getTime() }
}
If you are using Mongoose,
try {
const data = await GPSDatas.aggregate([
{
$match: { createdAt : { $gt: new Date() }
},
{
$sort: { createdAt: 1 }
}
])
console.log(data)
} catch(error) {
console.log(error)
}
Find with a specific date:
db.getCollection('CollectionName').find({"DepartureDate" : new ISODate("2019-06-21T00:00:00.000Z")})
Find with greater gte
or little lt
:
db.getCollection('CollectionName').find({"DepartureDate" : { $gte : new ISODate("2019-06-11T00:00:00.000Z") }})
Find by range:
db.getCollection('CollectionName').find({
"DepartureDate": {
$lt: new Date(),
$gte: new Date(new Date().setDate(new Date().getDate()-15))
}
})
참고URL : https://stackoverflow.com/questions/8835757/return-query-based-on-date
'Programing' 카테고리의 다른 글
i = (i, ++ i, 1) + 1은 무엇입니까? (0) | 2020.05.22 |
---|---|
Eclipse 디버거에서 Step Into와 Step Over의 차이점은 무엇입니까? (0) | 2020.05.22 |
python setup.py가 Travis CI에서 잘못된 명령 'bdist_wheel'을 말하는 이유는 무엇입니까? (0) | 2020.05.22 |
URL : 대시와 밑줄 (0) | 2020.05.22 |
실제 JMS / 메시지 큐 사용? (0) | 2020.05.22 |