programing

MongoDB: 지난 24시간 동안 작성된 문서만 가져오시겠습니까?

newsource 2023. 5. 25. 22:07

MongoDB: 지난 24시간 동안 작성된 문서만 가져오시겠습니까?

지난 24시간 동안 작성된 문서만 조회하도록 쿼리를 제한하려고 합니다.

이 쿼리를 구성하는 가장 좋은 방법은 무엇입니까?날짜를 기준으로 제한하려면 어떻게 해야 합니까?

더하다createdAt필드, 인덱스, 쿼리

db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}})

86400초보다 오래된 모든 레코드가 반환됩니다.

다른 인덱스를 사용하지 않고 기본 오브젝트를 사용하는 경우ID를 _id로 지정하면 다음 작업을 수행할 수 있습니다.

var ObjectID = require('mongodb').ObjectID

db.collection.find({
  _id: {
    $gt: ObjectID.createFromTime(Date.now() / 1000 - 24*60*60)
  }
}, callback)

구글을 통해 여기에 도착하는 다른 사용자는 다음과 같이 mongo 셸에서 이 작업을 수행할 수 있습니다.

db.collection.find({ $where: function () { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000)  }  })

몽구스에서 사용합니다.

let ObjectId    = require('mongodb').ObjectID;

Property.find({
    _id: {
        $gt: ObjectId.createFromTime(Date.now() / 1000 - 24 * 60 * 60)
    }
}, (err, result) => {
    console.log(err || result);
});

무엇보다도 당신이 사람들에게 당신의 컬렉션의 스키마를 제공한다면 정말 도움이 될 것입니다.

하지만 이미 3시간이 지났고 아무도 대답하지 않았기 때문에 저는 노력할 것입니다.

입력한 항목이 있고 작성된 필드가 ISODate인 At라고 가정합니다.

{
somefield: "test",
createdAt: ISODate("2012-08-13T04:00:00Z")
}

그래서 당신이 해야 할 일은 이 필드에 색인을 붙이는 것입니다.

db.yourColl.ensureIndex({createdAt:1});

그러면 node.js에서 현재 시간을 얻을 수 있습니다. 24시간 대신 시작 값을 얻을 수 있습니다. (mongdb에는 NOW와 유사한 것이 없는 것으로 알고 있습니다.)내가 틀렸다면 누군가를 바로 잡아주세요.)

db.yourColl.find({
   createdAt: {
     $gte: start
   }
});

이것이 누군가에게 도움이 되기를 바랍니다.지난 24시간의 데이터를 조회하기 위해 피몬고를 사용하고 있습니다.저의 경우 현재 시간을 BSON 타임스탬프로 변환해야 했습니다.

먼저 Bson 타임스탬프를 가져와야 했습니다.

from bson.timestamp import Timestamp

그런 다음 검색 질의에서 다음을 수행했습니다.

yesterday  = datetime.datetime.now() - datetime.timedelta(days=1)

findQuery = {
    "unix": {
        "$gte": Timestamp(int(yesterday.strftime("%s")),0)
     }
}

시작 위치Mongo 5.0새로운 집계 연산자에 적합한 사용 사례입니다.

// { "_id" : ObjectId("60c8f804fb832fe2f2011657") }
db.collection.aggregate([
  { $match: { $expr:
    { $lt: [{ $dateDiff: { startDate: "$_id", endDate: "$$NOW", unit: "hour" } }, 24 ]}
  }}
])
// { "_id" : ObjectId("60c8f804fb832fe2f2011657") } // if document created within the last 24 hours

주의해야 할 몇 가지 사항:

  • 기본적으로 저희는.$match기간($dateDiff) 생성 날짜 사이(그 날짜로 표시됨)_id) 그리고 지금 ($$NOW)가 적음($lt)보다24 hours.

  • 시작 날짜는 다음과 같습니다.$_id(ObjectId):

    • 정말로ObjectId생성된 타임스탬프를 포함합니다.
    • 그리고.$dateDiff받아들일 수 있습니다.ObjectId시간적 표현으로서
  • 종료 날짜는 입니다. 이는 현재 날짜 시간 값을 반환하는 변수입니다.

"TIME"은 타임스탬프를 저장하는 필드입니다.

db.your_collection_name.find({"TIME":{'$lt': new Date(),'$gte':new Date(new Date().setDate(new Date().getDate()-1))}},{}).count();

일부 솔루션은 새 날짜()보다 오래되었습니다.이것은 2022년에 업데이트된 Golang과 함께 작동할 것입니다.

시간 모듈을 포함해야 합니다.

import (
    "time")

기본 분을 - 연산자와 함께 사용합니다.아래는 24시간에 60분을 곱한 것을 의미합니다.빼기 연산자를 사용하여 실제로 빼기 추가:

"$gt": time.Now().Add(-60 * 24 * time.Minute),

필터 포함:

filter := bson.M{
            "$and": []bson.M{
        {
            "createdat": bson.M{
                "$gt": time.Now().Add(-60 * 24 * time.Minute),
            },
        },
        {
            "userid": userid,
        },
        }}

치료를 연기해야 합니다.

cursor, _ := todoCollection.Find(ctx, filter, findOptions)

    for cursor.Next(ctx) {
        var product models.ProductPost
        cursor.Decode(&product)
        products = append(products, product)
    }
    defer cursor.Close(ctx)

길이 가져오기

fmt.Println(len(products))
await db.yourColl.find({
   "timestamp": {
       $lt: new Date(),
       $gte: new Date(new Date().setDate(new Date().getDate()-(24* 60 * 60 * 1000)))
   }
})

내 경우 작동합니다.

저도 같은 문제를 겪었고 많은 검색 끝에 지난 X일 동안의 데이터를 가져올 수 있는 최상의 솔루션은 다음과 같습니다.

let date_obj = new Date();
let requestedTime = new Date(new Date().setDate(date_obj.getDate() - day));
    
    db.collection.find({
      createdAt: {$gt: requestedTime}
    });

day 변수는 원하는 일 수에 대한 숫자 값이어야 합니다. 예를 들어, 1일 전(지난 24시간), 2일 전(지난 48시간), 2일 전(지난 48시간), 30일 전(지난 2개월), 60일 전(예:

let date_obj = new Date();
let requestedTime = new Date(new Date().setDate(date_obj.getDate() - 1));

document.querySelector("#current_date").innerHTML = `current date: ${date_obj}`
document.querySelector("#last_24H_date").innerHTML = `last 24 hours: ${requestedTime}`
<div id="current_date"></div>
<div id="last_24H_date"></div>

db.video.find({"timestamp":{$lt: new Date(),$gte: new Date(new Date().setDate(new Date().getDate()-1))}})

언급URL : https://stackoverflow.com/questions/13314678/mongodb-only-fetch-documents-created-in-the-last-24hrs