写真のコレクションがあり、アルバム内の現在の写真の位置を表示する必要があります。並べ替え条件は複雑です: sort({added:1,weight:1,_id:1}) ため、現在の前の写真の数を確認する機会はありません。
MapReduce を使用しようとしましたが、PostgreSQL (44ms) と比較して非常に遅く (615 ms) 動作します。
Mongoでいくつかの要素の行番号を取得するベストプラクティスは何ですか?
写真のコレクションがあり、アルバム内の現在の写真の位置を表示する必要があります。並べ替え条件は複雑です: sort({added:1,weight:1,_id:1}) ため、現在の前の写真の数を確認する機会はありません。
MapReduce を使用しようとしましたが、PostgreSQL (44ms) と比較して非常に遅く (615 ms) 動作します。
Mongoでいくつかの要素の行番号を取得するベストプラクティスは何ですか?
これはページネーションのような問題です。基本的に、カウントはクライアント側で実行する必要があります。安定した順序が必要な場合は、_id
フィールドでもソートする必要があります (不変であるため)。どうやら、あなたはすでにそれをやっています。
[pseudocode]
var criteria = { "album_id" : "foo", ... };
var skip = 50; // assuming we're on page 2 and each page has 50 photos
var cursor = db.Photo.find(criteria).
sort({"added" :1, "weight" : 1, "_id" : 1}).
skip(skip).limit(50);
// count() doesn't honour skip or limit, so this is total number of
// Photos matching 'criteria'
var count = cursor.count();
for(var i = 0; i < cursor.length; ++i)
cursor[i].index = skip + i;
// each photo is now cursor[x].index of 'count' photos total
それが役立つことを願っています