programing

mongodb 컬렉션에서 가장 오래된/최연소 게시물 찾기

linuxpc 2023. 7. 5. 20:31
반응형

mongodb 컬렉션에서 가장 오래된/최연소 게시물 찾기

나는 있습니다mongodb필드가 많은 컬렉션입니다.하나의 필드는 'date_time'이며 ISO 날짜 형식입니다. 예:ISODate("2014-06-11T19:16:46Z")다른 필드는 '이름'입니다.

주어진 aname컬렉션에서 가장 오래된/가장 어린 게시물을 어떻게 찾을 수 있습니까?

예: 있는 경우two'data' 컬렉션의 게시물:

[{'name' : 'John', 'date_time' : ISODate("2014-06-11T19:16:46Z")},
 {'name' : 'John', 'date_time' : ISODate("2015-06-11T19:16:46Z")}]

'John'이라는 이름이 주어지면 컬렉션에서 가장 오래된 게시물을 어떻게 찾을 수 있습니까? 즉, 다음과 같은 게시물이 있습니다.ISODate("2014-06-11T19:16:46Z")마찬가지로 가장 어린 게시물도 마찬가지입니다.

가장 오래된 항목:

db.posts.find({ "name" : "John" }).sort({ "date_time" : 1 }).limit(1)

최신:

db.posts.find({ "name" : "John" }).sort({ "date_time" : -1 }).limit(1)

인덱스 위치{ "name" : 1, "date_time" : 1 }쿼리를 효율적으로 수행할 수 있습니다.

다음과 같이 집계할 수 있습니다.

  • 다음을 작성합니다.index에서name그리고.date_time필드, 그래서.$match그리고.$sort무대 작업에서 사용할 수 있습니다.

    db.t.ensureIndex({"name":1,"date_time":1})

  • $match원하는 모든 기록name(s).

  • $sort타고date_time오름차순으로
  • $group의 옆에name필드. $first 연산자를 사용하여 그룹의 첫 번째 레코드를 가져오십시오. 이 레코드는 가장 오래된 레코드이기도 합니다.$last 연산자를 사용하여 그룹의 마지막 레코드를 가져오면 최신 레코드가 됩니다.
  • 전체 레코드를 가져오려면 $$ROOT 시스템 변수를 사용합니다.

코드:

db.t.aggregate([
{$match:{"name":"John"}},
{$sort:{"date_time":1}},
{$group:{"_id":"$name","oldest":{$first:"$$ROOT"},
                       "youngest":{$last:"$$ROOT"}}}
])

o/p:

{
        "_id" : "John",
        "oldest" : {
                "_id" : ObjectId("54da62dc7f9ac597d99c182d"),
                "name" : "John",
                "date_time" : ISODate("2014-06-11T19:16:46Z")
        },
        "youngest" : {
                "_id" : ObjectId("54da62dc7f9ac597d99c182e"),
                "name" : "John",
                "date_time" : ISODate("2015-06-11T19:16:46Z")
        }
}
db.t.find().sort({ "date_time" : 1 }).limit(1).pretty()

언급URL : https://stackoverflow.com/questions/28437909/find-oldest-youngest-post-in-mongodb-collection

반응형