월, 일, 연도에 Mongodb 쿼리...옛날의
mongodb를 사용하고 있으며 이러한 방식으로 데이터베이스에 날짜 시간을 저장합니다.
"17-11-2011 18:00" 날짜에 대해 저장합니다.
date = datetime.datetime(2011, 11, 17, 18, 0)
db.mydatabase.mycollection.insert({"date" : date})
저는 그런 요청을 하고 싶습니다.
month = 11
db.mydatabase.mycollection.find({"date.month" : month})
또는
day = 17
db.mydatabase.mycollection.find({"date.day" : day})
이 질문을 어떻게 하는지 아는 사람?
날짜는 타임스탬프 형식으로 저장됩니다.특정 월에 속하는 모든 항목을 원하는 경우 해당 월의 시작과 끝을 쿼리합니다.
var start = new Date(2010, 11, 1);
var end = new Date(2010, 11, 30);
db.posts.find({created_on: {$gte: start, $lt: end}});
//taken from http://cookbook.mongodb.org/patterns/date_range/
mongodb 컬렉션을 일 또는 월과 같은 날짜 구성 요소별로 직접 쿼리할 수 없습니다.하지만 특별한 $where javascript 표현을 사용하면 가능합니다.
db.mydatabase.mycollection.find({$where : function() { return this.date.getMonth() == 11} })
아니면 간단히
db.mydatabase.mycollection.find({$where : 'return this.date.getMonth() == 11'})
(하지만 저는 첫 번째 것이 더 좋습니다)
최신 정보를 얻으려면 아래 셸 명령을 확인하십시오.
>date = ISODate("2011-09-25T10:12:34Z")
> date.getYear()
111
> date.getMonth()
8
> date.getdate()
25
편집:
다른 방법이 없는 경우에만 $where를 사용하십시오.성능 문제와 함께 발생합니다.@kamaradclimber와 @dcrosta의 아래 댓글을 확인해주세요.저는 다른 사람들이 그것에 대한 사실을 알 수 있도록 이 게시물을 열 것입니다.
자세한 내용은 쿼리의 $where 절 및 함수 링크를 참조하십시오.
조회가 필요하니 해당 월을 자체 숙박업소에 보관하는 것은 어떻습니까?보다 덜 우아한.$where색인화할 수 있기 때문에 더 나은 성능을 발휘할 가능성이 높습니다.
특정 월에 속하는 문서를 검색하려면 다음과 같이 쿼리해야 합니다.
// Anything greater than this month and less than the next month
db.posts.find({created_on: {$gte: new Date(2015, 6, 1), $lt: new Date(2015, 7, 1)}});
아래와 같은 쿼리는 가급적 피합니다.
// This may not find document with date as the last date of the month
db.posts.find({created_on: {$gte: new Date(2015, 6, 1), $lt: new Date(2015, 6, 30)}});
// don't do this too
db.posts.find({created_on: {$gte: new Date(2015, 6, 1), $lte: new Date(2015, 6, 30)}});
쿼리 언어 내에서 집계 식을 사용할 수 있는 연산자를 사용합니다.이렇게 하면 다음과 같이 쿼리에서 날짜 집계 연산자를 사용할 수 있습니다.
month = 11
db.mydatabase.mycollection.find({
"$expr": {
"$eq": [ { "$month": "$date" }, month ]
}
})
또는
day = 17
db.mydatabase.mycollection.find({
"$expr": {
"$eq": [ { "$dayOfMonth": "$date" }, day ]
}
})
파이프라인을 사용하는 함수를 사용하여 집계 작업을 실행할 수도 있습니다.
month = 11
db.mydatabase.mycollection.aggregate([
{
"$redact": {
"$cond": [
{ "$eq": [ { "$month": "$date" }, month ] },
"$$KEEP",
"$$PRUNE"
]
}
}
])
다른 요청의 경우
day = 17
db.mydatabase.mycollection.aggregate([
{
"$redact": {
"$cond": [
{ "$eq": [ { "$dayOfMonth": "$date" }, day ] },
"$$KEEP",
"$$PRUNE"
]
}
}
])
OR 사용
month = 11
day = 17
db.mydatabase.mycollection.aggregate([
{
"$redact": {
"$cond": [
{
"$or": [
{ "$eq": [ { "$month": "$date" }, month ] },
{ "$eq": [ { "$dayOfMonth": "$date" }, day ] }
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
])
AND 사용
var month = 11,
day = 17;
db.collection.aggregate([
{
"$redact": {
"$cond": [
{
"$and": [
{ "$eq": [ { "$month": "$createdAt" }, month ] },
{ "$eq": [ { "$dayOfMonth": "$createdAt" }, day ] }
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
])
운영자는 및 파이프라인의 기능을 통합하고 조건과 일치하는 모든 문서를 반환하고 변수를 사용하여 일치하지 않는 문서는 파이프라인에서 삭제합니다.
$dayOf와 같은 날짜 집계 연산자별로 월, 일, 연도별 레코드를 찾을 수 있습니다.년, $dayOf주, 월, 년 등
예를 들어 2016년 4월에 생성된 모든 주문을 원한다면 아래 쿼리를 사용할 수 있습니다.
db.getCollection('orders').aggregate(
[
{
$project:
{
doc: "$$ROOT",
year: { $year: "$created" },
month: { $month: "$created" },
day: { $dayOfMonth: "$created" }
}
},
{ $match : { "month" : 4, "year": 2016 } }
]
)
여기에 작성된 문서의 날짜 유형 필드와 $$ROOT를 사용하여 다음 단계에서 다른 모든 필드를 프로젝트에 전달하고 문서의 모든 세부 정보를 제공합니다.
필요에 따라 위의 쿼리를 최적화할 수 있습니다. 예를 들어 보겠습니다.날짜 집계 연산자에 대해 자세히 알아보려면 링크를 방문하십시오.
MongoDB_DataObject 래퍼를 사용하여 다음과 같은 쿼리를 수행할 수 있습니다.
$model = new MongoDB_DataObject('orders');
$model->whereAdd('MONTH(created) = 4 AND YEAR(created) = 2016');
$model->find();
while ($model->fetch()) {
var_dump($model);
}
또는 마찬가지로 직접 쿼리 문자열을 사용합니다.
$model = new MongoDB_DataObject();
$model->query('SELECT * FROM orders WHERE MONTH(created) = 4 AND YEAR(created) = 2016');
while ($model->fetch()) {
var_dump($model);
}
언급URL : https://stackoverflow.com/questions/8136652/query-mongodb-on-month-day-year-of-a-datetime
'programing' 카테고리의 다른 글
| c# Excel interop 학습 리소스 (0) | 2023.05.07 |
|---|---|
| mongodb의 장점이 스키마가 없다는 것인데 mongoose는 왜 스키마를 사용합니까? (0) | 2023.05.07 |
| 가장 유용한 NLog 구성 (0) | 2023.05.02 |
| 파이썬에서 목록의 요소 수(목록 길이)를 가져오려면 어떻게 해야 합니까? (0) | 2023.05.02 |
| 에서 HTTP POST 요청을 보냅니다.그물 (0) | 2023.05.02 |