[MONGODB] 어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있습니까?
MONGODB어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있습니까?
나는이 문서화되어 어디서든 찾을 수 없습니다. 기본적으로 찾기 () 작업은 처음부터 기록을 얻을 것이다. 어떻게하여 MongoDB의 마지막 N 기록을 얻을 수 있나요?
편집 : 또한 나는 반환 된 결과가 가장 최근이 아니라 반대로 덜 최근에서 주문합니다.
해결법
-
==============================
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.마지막 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.마지막 N 기록을 얻기 위해 당신은 쿼리 아래 실행할 수 있습니다 :
마지막 N 기록을 얻기 위해 당신은 쿼리 아래 실행할 수 있습니다 :
db.yourcollectionname.find({$query: {}, $orderby: {$natural : -1}}).limit(yournumber)
당신은 하나의 마지막 레코드를 원하는 경우 :
db.yourcollectionname.findOne({$query: {}, $orderby: {$natural : -1}})
참고 : $ 천연 대신에 당신이 당신의 컬렉션에서 열 중 하나를 사용할 수 있습니다.
-
==============================
4.당신은 어떤 생략 된 값에서 마지막 N 기록 시작을 얻기 위해) (생략, 정렬 () 제한 ()를 사용할 수 있습니다
당신은 어떤 생략 된 값에서 마지막 N 기록 시작을 얻기 위해) (생략, 정렬 () 제한 ()를 사용할 수 있습니다
db.collections.find().sort(key:value).limit(int value).skip(some int value);
-
==============================
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.이 계정에 쿼리 조건을 고려하지 않기 때문에 당신은 컬렉션의 크기에 따라 "건너 뛰기"수 없습니다.
이 계정에 쿼리 조건을 고려하지 않기 때문에 당신은 컬렉션의 크기에 따라 "건너 뛰기"수 없습니다.
정확한 솔루션은 필요한 경우 그 결과의 순서를 조절하여 원하는 종점에서 정렬 결과 집합의 크기를 제한한다.
여기에 실제 코드를 기반으로, 예입니다.
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.이 방법을 시도 할 수 있습니다 :
이 방법을 시도 할 수 있습니다 :
컬렉션과 레코드의 총 수를 가져옵니다
db.dbcollection.count()
그런 다음 건너 뛰기 사용
db.dbcollection.find().skip(db.dbcollection.count() - 1).pretty()
-
==============================
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.당신은 찾기 옵션을 사용 할 수 있습니다 : 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.오전 첸 @
오전 첸 @
당신은 콜렉션에서 문서의 부분 집합의 최신 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.
db.collection.find().hint( { $natural : -1 } ).sort(field: 1/-1).limit(n)
MongoDB의 문서에 따르면 :
-
==============================
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.마지막 기능은 일종의 제한하지해야합니다.
마지막 기능은 일종의 제한하지해야합니다.
예:
db.testcollection.find().limit(3).sort({timestamp:-1});
from https://stackoverflow.com/questions/4421207/how-to-get-the-last-n-records-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 컬렉션 모든 문서에 새 필드를 추가 (0) | 2019.12.02 |
---|---|
[MONGODB] 어떻게 몽구스의 문서 upsert / 업데이트하려면 어떻게해야합니까? (0) | 2019.12.02 |
[MONGODB] 어떻게하여 MongoDB에서 참조 된 개체는 쿼리합니까? (0) | 2019.12.01 |
[MONGODB] MongoDB의 날짜를 문자열로 변환 (0) | 2019.12.01 |
[MONGODB] 정수 값에 MongoDB를 정규식 검색 (0) | 2019.12.01 |