컬렉션의 가장 최근 기록을 알고 싶습니다. 그렇게하는 방법?
참고 : 다음 명령 줄 쿼리가 작동한다는 것을 알고 있습니다.
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의 인덱스는 B- 트리입니다. B- 트리 검색은 O (logN) 작업이므로 find({_id:...})
일정한 시간, O (1) 응답도 제공하지 않습니다.
즉, ID를 _id
사용 하는 경우 별로 정렬 할 수도 있습니다 ObjectId
. 자세한 내용은 여기를 참조하십시오 . 물론 그것도 마지막 순간까지만 좋다.
당신은 “두 번 쓰기”에 의지 할 수 있습니다. 메인 컬렉션에 한 번 쓰고 “마지막 업데이트”컬렉션에 다시 씁니다. 트랜잭션이 없으면 완벽하지는 않지만 “마지막 업데이트”컬렉션에 하나의 항목 만 있으면 항상 빠릅니다.
답변
MongoDB 컬렉션에서 마지막 항목을 가져 오는 또 다른 방법입니다 (예제에 대해서는 신경 쓰지 마십시오).
> 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})
는 _id
s를 기준으로 모든 문서의 내림차순으로 투영을 정의합니다 .
정렬 된 투영 (_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." }
답변
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 를 제공합니다.