programing

mongodb에서 findOne을 사용하여 최대 ID를 가진 요소 가져 오기

procenter 2021. 1. 14. 23:22
반응형

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

반응형