복붙노트

[MONGODB] 어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있습니까?

MONGODB

어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있습니까?

나는이 문서화되어 어디서든 찾을 수 없습니다. 기본적으로 찾기 () 작업은 처음부터 기록을 얻을 것이다. 어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있나요?

편집 : 또한 나는 반환 된 결과가 가장 최근이 아니라 반대로 덜 최근에서 주문합니다.

해결법

  1. ==============================

    1.나는 당신의 질문을 이해한다면, 당신은 오름차순으로 정렬해야합니다.

    나는 당신의 질문을 이해한다면, 당신은 오름차순으로 정렬해야합니다.

    당신이라는 일부 ID 또는 날짜 필드가 가정 "X"당신은 할 것 ...

    db.foo.find().sort({x:1});
    

    1 오름차순 정렬 (오래된 최신까지) -1과 내림차순 정렬한다 (최신 가장한다.)

    당신이 _id 필드 만든 자동차를 사용하는 경우 그것은 당신에 의해 주문이 사용할 수 있도록 ... 그 안에 포함 된 날짜가 ...

    db.foo.find().sort({_id:1});
    

    즉 모든 문서는 가장 오래된에서 최신으로 분류되어 다시 돌아갑니다.

    또한 자연 주문은 위에서 언급 한 사용할 수 있습니다 ...

    db.foo.find().sort({$natural:1});
    

    다시 1을 사용하거나 -1 원하는 순서에 따라.

    마지막으로,이 활짝 열려 쿼리 이런 종류의 일을 할 때 당신도 할 수 있도록 제한을 추가하는 것이 좋습니다의 ...

    db.foo.find().sort({_id:1}).limit(50);
    

    또는

    db.foo.find().sort({$natural:1}).limit(50);
    
  2. ==============================

    2.마지막 N은 가장 최근에 덜 최근에서 기록을 추가,이 쿼리로 볼 수 있습니다 :

    마지막 N은 가장 최근에 덜 최근에서 기록을 추가,이 쿼리로 볼 수 있습니다 :

    db.collection.find().skip(db.collection.count() - N)
    

    당신은 역순으로합니다 :

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

    당신이 몽고 - 해커를 설치하는 경우 당신은 또한 사용할 수 있습니다 :

    db.collection.find().reverse().limit(N)
    

    당신은이 명령 당신이 ~ / .mongorc.js에서 사용자 정의 함수를 만들 수있는 모든 시간을 쓰는 피곤합니다. 예를 들면

    function last(N) {
        return db.collection.find().skip(db.collection.count() - N);
    }
    

    다음 (N)을 몽고 쉘은 단지 마지막 입력에서

  3. ==============================

    3.마지막 N 기록을 얻기 위해 당신은 쿼리 아래 실행할 수 있습니다 :

    마지막 N 기록을 얻기 위해 당신은 쿼리 아래 실행할 수 있습니다 :

    db.yourcollectionname.find({$query: {}, $orderby: {$natural : -1}}).limit(yournumber)
    

    당신은 하나의 마지막 레코드를 원하는 경우 :

    db.yourcollectionname.findOne({$query: {}, $orderby: {$natural : -1}})
    

    참고 : $ 천연 대신에 당신이 당신의 컬렉션에서 열 중 하나를 사용할 수 있습니다.

  4. ==============================

    4.당신은 어떤 생략 된 값에서 마지막 N 기록 시작을 얻기 위해) (생략, 정렬 () 제한 ()를 사용할 수 있습니다

    당신은 어떤 생략 된 값에서 마지막 N 기록 시작을 얻기 위해) (생략, 정렬 () 제한 ()를 사용할 수 있습니다

    db.collections.find().sort(key:value).limit(int value).skip(some int value);
    
  5. ==============================

    5.정렬 및 자연 주문, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order : 쿼리에서 봐 뿐만 아니라 같은 종류의 () 커서 방법에 따라 http://www.mongodb.org/display/DOCS/Advanced+Queries

    정렬 및 자연 주문, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order : 쿼리에서 봐 뿐만 아니라 같은 종류의 () 커서 방법에 따라 http://www.mongodb.org/display/DOCS/Advanced+Queries

  6. ==============================

    6.이 계정에 쿼리 조건을 고려하지 않기 때문에 당신은 컬렉션의 크기에 따라 "건너 뛰기"수 없습니다.

    이 계정에 쿼리 조건을 고려하지 않기 때문에 당신은 컬렉션의 크기에 따라 "건너 뛰기"수 없습니다.

    정확한 솔루션은 필요한 경우 그 결과의 순서를 조절하여 원하는 종점에서 정렬 결과 집합의 크기를 제한한다.

    여기에 실제 코드를 기반으로, 예입니다.

    var query = collection.find( { conditions } ).sort({$natural : -1}).limit(N);
    
    query.exec(function(err, results) {
        if (err) { 
        }
        else if (results.length == 0) {
        }
        else {
            results.reverse(); // put the results into the desired order
            results.forEach(function(result) {
                // do something with each result
            });
        }
    });
    
  7. ==============================

    7.이 방법을 시도 할 수 있습니다 :

    이 방법을 시도 할 수 있습니다 :

    컬렉션과 레코드의 총 수를 가져옵니다

    db.dbcollection.count() 
    

    그런 다음 건너 뛰기 사용

    db.dbcollection.find().skip(db.dbcollection.count() - 1).pretty()
    
  8. ==============================

    8., 정렬 등 건너 뛰고은 컬렉션의 크기에 따라 매우 느릴 수 있습니다.

    , 정렬 등 건너 뛰고은 컬렉션의 크기에 따라 매우 느릴 수 있습니다.

    당신은 몇 가지 기준에 의해 색인 컬렉션이 경우 더 나은 성능을 달성 할 것; 그리고 당신은 분 () 커서를 사용할 수 있습니다 :

    db.collectionName.setIndex (yourIndex)와 첫째, 인덱스 당신에게 수집 당신은 항상 "N 마지막 항목을"원하기 때문에 당신은 내림차순으로 당신 인덱스는 "첫 번째 N 항목"을 얻는 것과 동일 그렇다면 ..., 멋진 오름차순 또는 내림차순을 사용할 수 있습니다.

    그런 다음 컬렉션의 첫 번째 항목을 찾아 같은 검색의 최소 기준으로 인덱스 필드의 값을 사용합니다 :

    db.collectionName.find().min(minCriteria).hint(yourIndex).limit(N)
    

    여기 분 () 커서에 대한 참조는 다음과 같습니다 https://docs.mongodb.com/manual/reference/method/cursor.min/

  9. ==============================

    9.당신은 찾기 옵션을 사용 할 수 있습니다 : http://docs.meteor.com/api/collections.html#Mongo-Collection-find

    당신은 찾기 옵션을 사용 할 수 있습니다 : http://docs.meteor.com/api/collections.html#Mongo-Collection-find

    db.collection.find({}, {sort: {createdAt: -1}, skip:2, limit: 18}).fetch();
    
  10. ==============================

    10.오전 첸 @

    오전 첸 @

    당신은 콜렉션에서 문서의 부분 집합의 최신 n 개의 항목에 대한 집계를 사용할 수 있습니다. 여기에 (이 경우 단계 4와 5 사이에 일을 할 것이다) 그룹화하지 않고 단순화 된 예입니다.

    최신 20 개 항목 (필드에 근거은 "타임 스탬프"이라고 함)이 반환, 오름차순으로 정렬. 그런 다음 각 문서 결과로, 타임 스탬프 및 whatever_field_you_want_to_show을 _ID 프로젝트.

    var pipeline = [
            {
                "$match": { //stage 1: filter out a subset
                    "first_field": "needs to have this value",
                    "second_field": "needs to be this"
                }
            },
            {
                "$sort": { //stage 2: sort the remainder last-first
                    "timestamp": -1
                }
            },
            {
                "$limit": 20 //stage 3: keep only 20 of the descending order subset
            },
            {
                "$sort": {
                    "rt": 1 //stage 4: sort back to ascending order
                }
            },
            {
                "$project": { //stage 5: add any fields you want to show in your results
                    "_id": 1,
                    "timestamp" : 1,
                    "whatever_field_you_want_to_show": 1
                }
            }
        ]
    
    yourcollection.aggregate(pipeline, function resultCallBack(err, result) {
      // account for (err)
      // do something with (result)
    }
    

    그래서, 결과는 같을 것이다 :

    { 
        "_id" : ObjectId("5ac5b878a1deg18asdafb060"),
        "timestamp" : "2018-04-05T05:47:37.045Z",
        "whatever_field_you_want_to_show" : -3.46000003814697
    }
    { 
        "_id" : ObjectId("5ac5b878a1de1adsweafb05f"),
        "timestamp" : "2018-04-05T05:47:38.187Z",
        "whatever_field_you_want_to_show" : -4.13000011444092
    }
    

    희망이 도움이됩니다.

  11. ==============================

    11.

    db.collection.find().hint( { $natural : -1 } ).sort(field: 1/-1).limit(n)
    

    MongoDB의 문서에 따르면 :

  12. ==============================

    12.배열 요소를 제한 $ 슬라이스 연산자를 사용

    배열 요소를 제한 $ 슬라이스 연산자를 사용

    GeoLocation.find({},{name: 1, geolocation:{$slice: -5}})
        .then((result) => {
          res.json(result);
        })
        .catch((err) => {
          res.status(500).json({ success: false, msg: `Something went wrong. ${err}` });
    });
    

    우리가 지난 5 레코드를 가져 그 어디에서 위치 정보는 데이터의 배열입니다.

  13. ==============================

    13.마지막 기능은 일종의 제한하지해야합니다.

    마지막 기능은 일종의 제한하지해야합니다.

    예:

    db.testcollection.find().limit(3).sort({timestamp:-1}); 
    
  14. from https://stackoverflow.com/questions/4421207/how-to-get-the-last-n-records-in-mongodb by cc-by-sa and MIT license