날짜를 기준으로 쿼리를 반환하다
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") });
노드 v0.12.7 및 v4.4.4를 사용하여 Mongo v3.2.3에서 유사한 기능을 구현하고 있으며 다음과 같이 사용되고 있습니다.
{ $gte: new Date(dateVar).toISOString() }
ISODate를 통과하고 있습니다(예: 2016-04-22).T00:00:00Z)와 이것은 toISOString 함수의 유무에 관계없이 .find() 쿼리에 대해 기능합니다.그러나 .aggregate() $match 쿼리에서 사용하는 경우 toISOString 함수를 좋아하지 않습니다.
해당 날짜에 아무 곳에서나 아이템을 가져오려면 두 날짜를 비교해야 합니다.
이와 같이 첫 번째 날짜에서 두 개의 날짜를 생성하여 하루를 시작하고 하루를 끝낼 수 있습니다.
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)
지난 5분 동안 새로운 정보를 모두 얻으려면 몇 가지 계산을 해야 하는데 어렵지 않습니다.
먼저 일치시킬 속성에 색인을 만듭니다(내림차순의 경우 정렬 방향 -1, 오름차순의 경우 1 포함).
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
그런 다음 최근 5분 동안 작성된 문서를 쿼리합니다(60초*5분). javascript는.getTime()
를 입력으로 사용하기 전에 1000을 곱해야 하는 밀리초를 반환합니다.new Date()
컨스트럭터
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()
현재 시간(밀리초)을 제공합니다.- 여기서 5분(밀리초)을 빼야 합니다.
5*60*1000
-- 나는 단지 곱할 뿐이다.60
변경은 간단합니다.그냥 바꿀 수 있어5
로.120
2시간(120분)을 원하는 경우. new Date().getTime()-60*5*1000
우리에게 준다1484383878676
(5분 전(밀리초))
이제 우리는 그 정보를new Date()
컨스트럭터: MongoDB 타임스탬프에 필요한 ISO 문자열 형식을 가져옵니다.
{ $gte: new Date(resultFromAbove).toISOString() }
(mongodb.find() 쿼리)- 변수를 사용할 수 없기 때문에 모든 작업을 한 번에 수행합니다.
new Date(new Date().getTime()-60*5*1000)
- ...그러면 ISO 문자열로 변환:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
우리에게 준다2017-01-14T08:53:17.586Z
node-mongodb-native 드라이버를 사용하는 경우 변수를 사용하는 경우에는 물론 이 방법이 조금 더 쉬울 수 있지만, 이것은 제가 주로 사용하는 mongo shell에서 작동합니다.
특정 날짜로 찾기:
db.getCollection('CollectionName').find({"DepartureDate" : new ISODate("2019-06-21T00:00:00.000Z")})
큰 으로 찾기gte
거의 없다lt
:
db.getCollection('CollectionName').find({"DepartureDate" : { $gte : new ISODate("2019-06-11T00:00:00.000Z") }})
범위별 검색:
db.getCollection('CollectionName').find({
"DepartureDate": {
$lt: new Date(),
$gte: new Date(new Date().setDate(new Date().getDate()-15))
}
})
다음의 조작도 가능합니다.
{
"dateProp": { $gt: new Date('06/15/2016').getTime() }
}
몽구스를 사용하시는 분들은
try {
const data = await GPSDatas.aggregate([
{
$match: { createdAt : { $gt: new Date() }
},
{
$sort: { createdAt: 1 }
}
])
console.log(data)
} catch(error) {
console.log(error)
}
날짜/시간에서 레코드를 가져오려면 다음을 사용할 수 있습니다.
(Mongodb 나침반 3.6.8(PyMongo 포함)
mongo.db.collection.aggregate([{"$match":{"object.object.key":{"$gte":ISODate('2021-01-27T00:00:00Z').toISOString()}}}])
db.collection.find({"object.object.key":{"$gte":ISODate('2021-01-27T00:00:00Z').toISOString()}})
언급URL : https://stackoverflow.com/questions/8835757/return-query-based-on-date
'source' 카테고리의 다른 글
Chrome에서의 감시 요청 (0) | 2023.03.08 |
---|---|
Facebook-WordPress 댓글/피드백 통합 (0) | 2023.03.08 |
ui-sref Angularjs 값을 동적으로 설정합니다. (0) | 2023.03.08 |
리액트 테스트 라이브러리를 사용하여 재료 UI 자동 완성 테스트 방법 (0) | 2023.03.08 |
워드프레스로 생성된 암호를 해독하는 방법 (0) | 2023.03.08 |