ドキュメントの 1 つに固定サイズの配列を格納したいと考えています。
IE ユーザー コレクションには一連のレポートがあります。各レポートにはタイムスタンプがあります。最新 (最新) が配列の先頭になるように、配列内のレポートを並べ替えたいと思います。
$slice メソッドを使用しようとしていますが、配列内の最後の N 要素しか保持できないようです。私の場合、最初の N 個の要素を配列に保持したいと考えています。
配列を最新の時間順に並べたままにして、最新のレポートを N 個だけ保存する方法はありますか。そうすれば、N 件の最新レポートを照会するときに、配列の先頭から取得できます。
var newReport = ...;
db.users.update({{_id: id},$push: {reports: {$each: [newReport], $sort: {"updatedOn": -1}, $slice: -3}}})
これにより、新しいものから古いものへと並べ替えられますが、スライスが負であるため、最も古い 3 つのレポートが配列に保持されます。
var newReport = ...;
db.users.update({{_id: id},$push: {reports: {$each: [newReport], $sort: {"updatedOn": 1}, $slice: -3}}})
これにより、古いものから新しいものへと並べ替えられ、レポートのリストによって最新の 3 つのレポートが保持され、古いものから新しいものへと並べ替えられます。
私はこれを間違っていますか?