반응형
mongodb에서 findOne을 사용하여 최대 ID를 가진 요소 가져 오기
mongo 컬렉션에서 _id 필드가 가장 큰 요소를 검색하려고합니다. 다음 쿼리를 통해 수행 할 수 있다는 것을 알고 있습니다.
db.collection.find().sort({_id: -1}).limit(1)
그러나 그것은 다소 불분명 해 보이며 findOne ()을 사용하여 특정 요소를 얻는 방법이 있는지 궁금합니다.
참고 : ObjectId 에서 읽은 내용에서 첫 번째 바이트는 Epoch 이후 밀리 초에 해당하므로 삽입되는 마지막 요소가 가장 큰 _id를 갖기 때문에이 작업을 수행하고 싶습니다 . 컬렉션에 삽입 된 마지막 요소를 검색하는 다른 방법이 있습니까?
_id 필드의 모든 값 find
을 스캔해야 최대 값을 알아 내야하기 때문에 더 느려질 집계가 아니라 이미있는 것처럼을 사용해야합니다 .
의견이 지적했듯이 기능적 또는 우아함 측면에서 find ()와 findOne ()을 사용하는 것에 는 차이 가 없습니다 . 사실, findOne
쉘에서 (그리고 그것을 구현하는 드라이버에서) find (제한 -1, 셸에서 pretty print)로 정의됩니다.
당신이 정말로 동등한 것을 하고 싶다면
db.collection.find().sort({_id:-1}).limit(1).pretty()
findOne
다음 구문 으로 할 수 있습니다.
db.collection.findOne({$query:{},$orderby:{_id:-1}})
mongodb 집계를 사용하여 최대 _id를 얻을 수 있습니다. 찾기 및 정렬은 과잉 일 수 있습니다.
db.myCollection.aggregate({
$group: {
_id: '',
last: {
$max: "$_id"
}
}
});
PHP 드라이버 (mongodb)
사용findOne()
$filter=[];
$options = ['sort' => ['_id' => -1]]; // -1 is for DESC
$result = $collection->findOne(filter, $options);
$maxAge = $result['age']
import pymongo
tonystark = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = tonystark["tonystark_db"]
savings = mydb["customers"]
x = savings.find().sort("_id")
for s in x:
print(s)
$maxId="";
$Cursor =$collection->find();
foreach($cursor as $document) {
$maxid =max($arr=(array($document['id'])));
}
print_r($maxid+1);
참조 URL : https://stackoverflow.com/questions/22118210/using-findone-in-mongodb-to-get-element-with-max-id
반응형
'programing' 카테고리의 다른 글
Mac OSX의 Dock에 Java Coffee Cup 아이콘이 표시되지 않도록 중지 (0) | 2021.01.14 |
---|---|
pushState : 상태 객체는 정확히 무엇입니까? (0) | 2021.01.14 |
Linux 명령 줄에있는 파일 / 디렉토리를 어떻게 찾을 수 있습니까? (0) | 2021.01.14 |
AutoCloseable을 사용하여 여러 리소스 닫기 (리소스로 시도) (0) | 2021.01.14 |
Localhost 용 Googlemaps API 키 (0) | 2021.01.14 |