programing

mongodb 컬렉션에서 최신 레코드 가져오기

powerit 2023. 4. 3. 21:46
반응형

mongodb 컬렉션에서 최신 레코드 가져오기

컬렉션의 최신 레코드를 알고 싶습니다.어떻게 하는 거야?

주의: 다음 명령줄 쿼리가 작동하는 것으로 알고 있습니다.

1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson);
2. db.test.find().skip(db.test.count()-1).forEach(printjson)

여기서 idate에는 타임스탬프가 추가됩니다.

문제는 데이터 수집 시간이 길어지고 '테스트' 수집이 매우 크다는 것입니다.나는 일정한 시간 응답의 쿼리가 필요하다.

더 나은 mongodb 명령줄 쿼리가 있으면 알려주세요.

이것은 이전 답변을 재탕한 것이지만 다른 mongodb 버전에서 작동할 가능성이 높습니다.

db.collection.find().limit(1).sort({$natural:-1})

이것으로, 다음의 문서를 입수할 수 있습니다.collection

db.collectionName.findOne({}, {sort:{$natural:-1}})

$natural:-1레코드가 삽입된 순서와 반대되는 순서를 의미합니다.

편집: 모든 다운보터에 대해 위의 Mongoose 구문은 다음과 같습니다.mongo CLI 구문은 다음과 같습니다.db.collectionName.find({}).sort({$natural:-1}).limit(1)

MongoDB Collection에서 마지막 항목을 가져오는 또 다른 방법(예시는 신경 쓰지 마십시오)

> db.collection.find().sort({'_id':-1}).limit(1)

표준 투영

> db.Sports.find()
{ "_id" : ObjectId("5bfb5f82dea65504b456ab12"), "Type" : "NFL", "Head" : "Patriots Won SuperBowl 2017", "Body" : "Again, the Pats won the Super Bowl." }
{ "_id" : ObjectId("5bfb6011dea65504b456ab13"), "Type" : "World Cup 2018", "Head" : "Brazil Qualified for Round of 16", "Body" : "The Brazilians are happy today, due to the qualification of the Brazilian Team for the Round of 16 for the World Cup 2018." }
{ "_id" : ObjectId("5bfb60b1dea65504b456ab14"), "Type" : "F1", "Head" : "Ferrari Lost Championship", "Body" : "By two positions, Ferrari loses the F1 Championship, leaving the Italians in tears." }

정렬된 투영(_id: 역순서)

> db.Sports.find().sort({'_id':-1})
{ "_id" : ObjectId("5bfb60b1dea65504b456ab14"), "Type" : "F1", "Head" : "Ferrari Lost Championship", "Body" : "By two positions, Ferrari loses the F1 Championship, leaving the Italians in tears." }
{ "_id" : ObjectId("5bfb6011dea65504b456ab13"), "Type" : "World Cup 2018", "Head" : "Brazil Qualified for Round of 16", "Body" : "The Brazilians are happy today, due to the qualification of the Brazilian Team for the Round of 16 for the World Cup 2018." }
{ "_id" : ObjectId("5bfb5f82dea65504b456ab12"), "Type" : "NFL", "Head" : "Patriots Won SuperBowl 2018", "Body" : "Again, the Pats won the Super Bowl" }

sort({'_id':-1})모든 문서의 내림차순으로 투영을 정의합니다._ids.

정렬된 투영(_id: 역순): 컬렉션에서 최신(마지막) 문서를 가져옵니다.

> db.Sports.find().sort({'_id':-1}).limit(1)
{ "_id" : ObjectId("5bfb60b1dea65504b456ab14"), "Type" : "F1", "Head" : "Ferrari Lost Championship", "Body" : "By two positions, Ferrari loses the F1 Championship, leaving the Italians in tears." }

일정한 시간 응답을 가진 쿼리가 필요합니다.

기본적으로는 MongoDB의 인덱스는 B-Tree입니다.B-Tree 검색은 O(logN) 작업이기 때문에find({_id:...})일정한 시간을 제공하지 않습니다(O(1) 응답).

여기에 기재되어 있는 바와 같이,_id사용하시는 경우ObjectIdID를 입력해 주세요.자세한 내용은 여기를 참조해 주세요.물론, 그마저도 마지막 순간까지만 좋다.

"두 번 쓰기"를 사용해도 됩니다.기본 컬렉션에 한 번 쓰고 "마지막으로 업데이트된" 컬렉션에 다시 쓰십시오.트랜잭션이 없으면 완벽하지는 않지만 "마지막 업데이트" 컬렉션에 있는 항목이 하나뿐이므로 항상 빠릅니다.

php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);

마이솔루션:

db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})

문서에서 자동 생성된 Mongo 오브젝트 ID를 사용하는 경우 컬렉션에 삽입된 최신 문서를 검색할 수 있는 첫 번째 4바이트로 타임스탬프가 포함됩니다.오래된 질문인 건 알지만 누군가 다른 대안을 찾고 있다면요

db.collectionName.aggregate(
[{$group: {_id: null, latestDocId: { $max: "$_id"}}}, {$project: {_id: 0, latestDocId: 1}}])

위의 쿼리는 컬렉션에 삽입된 최신 문서의 _id를 제공합니다.

foo 컬렉션의 모든 MongoDB 문서에서 마지막 레코드를 가져오는 방법은 다음과 같습니다.(변경 foo,x,y..등)

db.foo.aggregate([{$sort:{ x : 1, date : 1 } },{$group: { _id: "$x" ,y: {$last:"$y"},yz: {$last:"$yz"},date: { $last : "$date" }}} ],{   allowDiskUse:true  })

그룹에 추가하거나 그룹에서 제거할 수 있습니다.

도움말 기사: https://docs.mongodb.com/manual/reference/operator/aggregation/group/ #pipe._S_group

https://docs.mongodb.com/manual/reference/operator/aggregation/last/

Mongo CLI 구문:

db.collectionName.find({}).sort({$natural:-1}).limit(1)

Mongo가 ID를 생성하게 하면 자동으로 증가하는 해시입니다.

mymongo: 자기 자신._collection.find_id"-1.limit(1)

언급URL : https://stackoverflow.com/questions/10920651/get-the-latest-record-from-mongodb-collection

반응형