mongodbの最後のNレコードを取得するにはどうすればよいですか?
How Get Last N Records Mongodb
ファイルにドキュメントが見つかりません。デフォルトでは、find()操作は最初からレコードをフェッチします。取得する方法 mongodb 最後のNレコード
編集:また、返される結果を最も近いものから最も新しいものへと並べ替えて、その逆ではないようにしたいです。
#1階
あなたはそれを使うことができますsort()
、limit()
、skip()
スキップされた値から始まる最後のNレコードを取得します
db.collections.find().sort(key:value).limit(int value).skip(some int value)
#2階
このクエリから最近追加されたものを見ることができます 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) }
次に、mongoシェルから入力しますlast(N)
#3階
最後のNレコードを取得するには、次のクエリを実行できます。
db.yourcollectionname.find({$query: {}, $orderby: {$natural : -1}}).limit(yournumber)
最後のレコードのみが必要な場合:
db.yourcollectionname.findOne({$query: {}, $orderby: {$natural : -1}})
注:$ naturalの代わりに、コレクション内の列の1つを使用できます。
#4階
最後の関数はsort
である必要がありますlimit
の代わりに。
例:
db.testcollection.find().limit(3).sort({timestamp:-1})
#5階
コレクションはクエリ条件を考慮しないため、コレクションのサイズに基づいて「スキップ」することはできません。
正しい解決策は、目的のエンドポイントから並べ替え、結果セットのサイズを制限してから、必要に応じて結果の順序を調整することです。
これは実際のコードに基づく例です。
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 }) } })
#6階
クエリの下に表示:並べ替えと自然な順序、 http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order そして、cursorメソッドの下のsort() http://www.mongodb.org/display/DOCS/Advanced+Query
#7階
あなたの質問を理解したら、昇順で並べ替える必要があります。
'x'という名前のIDまたは日付フィールドがあると仮定すると、次のことができます...
。分類()
db.foo.find().sort({x:1})
1 昇順(古いものから新しいものへ)にソートされます、- 1 降順(新しいものから古いものへ)にソートされます。
自動作成を使用する場合 _id フィールド、日付はフィールドに埋め込まれているので、日付を使用して並べ替えることができます...
db.foo.find().sort({_id:1})
これにより、すべてのドキュメントが古いものから新しいものへと返されます。
自然な秩序
上記もご利用いただけます 自然な秩序 ..。
db.foo.find().sort({$natural:1})
また、必要な順序で使用してください 1 または -1 。
.limit()を使用する
最後に、このような広く開かれたクエリを実行するときに制限を追加して、次のことができるようにすることをお勧めします...
db.foo.find().sort({_id:1}).limit(50)
または
db.foo.find().sort({$natural:1}).limit(50)
#8階
使用することをお勧めしますfind
オプション: http : //docs.meteor.com/api/collections.html#Mongo-Collection-find
db.collection.find({}, {sort: {createdAt: -1}, skip:2, limit: 18}).fetch()
#9階
@ビンチェン、
コレクション内のドキュメントのサブセットの最新のnエントリの要約を使用できます。これは、グループ化しない単純化された例です(この場合、ステージ4と5の間でグループ化します)。
これにより、(「タイムスタンプ」と呼ばれるフィールドに基づいて)最新の20エントリが、昇順で並べ替えられて返されます。次に、各document_id、timestamp、およびwhat_field_you_want_to_showを結果に投影します。
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 }
お役に立てれば。
#10階
db.collection.find().hint( { $natural : -1 } ).sort(field: 1/-1).limit(n)
による mongoDBドキュメント :
{$ natural:1}を指定して、クエリに前方収集スキャンを強制的に実行させることができます。
{$ natural:-1}を指定して、クエリに逆コレクションスキャンを強制的に実行することもできます。
#11階
使用する $スライス 演算子は配列要素を制限します
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つのレコードを取得します。
#12階
コレクションのサイズによっては、並べ替え、スキップ、その他の操作が非常に遅くなる場合があります。
特定の条件でコレクションにインデックスを付けると、パフォーマンスを向上させることができます。次に、min()カーソルを使用できます。
まず、use db.collectionName.setIndex( yourIndex )
コレクションにインデックスが付けられます。常に「最後のN個のアイテム」が必要なため、昇順または降順のいずれかを使用できます。降順でインデックスを作成する場合は、「最初のN個のアイテム」を取得するのと同じです。
次に、コレクションの最初のアイテムを見つけ、そのインデックスフィールド値を検索の最小条件として使用します。
db.collectionName.find().min(minCriteria).hint(yourIndex).limit(N)
これはmin()カーソルへの参照です。 https : //docs.mongodb.com/manual/reference/method/cursor.min/
#13階
次の方法を試すことができます。
次のコマンドを使用して、コレクション内のレコードの総数を取得します
db.dbcollection.count()
次に、スキップを使用します。
db.dbcollection.find().skip(db.dbcollection.count() - 1).pretty()