これをいくつかのこととして書き出すこともできましたが、考慮に入れると、「マングースのオブジェクトを取り戻す」ことが主な考慮事項のようです。
ですから、あなたが「できる」ことはいろいろあります。ただし、オブジェクトに「参照を入力」していて、配列内のオブジェクトの順序を変更したいので、これを修正する方法は1つしかありません。
データを作成するときに順番に修正します
「comments」配列を「created_at」の日付で並べ替える場合は、複数の可能性に分類されます。
-
「挿入」の順序で「追加」する必要があるため、「最新」は最後になりますが、最近(過去数年)のバージョンのMongoDBで
$position
$push
の修飾子として :Article.update( { "_id": articleId }, { "$push": { "comments": { "$each": [newComment], "$position": 0 } } }, function(err,result) { // other work in here } );
これにより、配列要素が既存の配列の「最初の」(0)インデックスに「追加」されるため、常に先頭に配置されます。
-
論理的な理由で、または「確認したい」場所で「位置」更新を使用できなかった場合は、さらに「長い」時間
$sort
$push
への修飾子 :Article.update( { "_id": articleId }, { "$push": { "comments": { "$each": [newComment], "$sort": { "$created_at": -1 } } } }, function(err,result) { // other work in here } );
そして、それは、各変更で指定された値を含む配列要素ドキュメントのプロパティで「ソート」します。次のこともできます:
Article.update( { }, { "$push": { "comments": { "$each": [], "$sort": { "$created_at": -1 } } } }, { "multi": true }, function(err,result) { // other work in here } );
これにより、コレクション全体のすべての「コメント」配列が、指定されたフィールドで1回のヒットで並べ替えられます。
他の解決策は、.aggregate()
のいずれかを使用して可能です。 その操作を実行した後、または独自の.sort()
を実行した後、配列を並べ替えたり、マングースオブジェクトに「再キャスト」したりします。 プレーンオブジェクト上。
これらは両方とも、実際には、「参照」情報を含む埋め込みアイテムを使用して、別個のモデルオブジェクトと「スキーマ」を作成する必要があります。したがって、これらの行で作業することはできますが、そもそも「最も必要な」手段でデータを並べ替えることができれば、不要なオーバーヘッドが発生するようです。
別の方法は、「virtuals」などのフィールドが常に.toObject()
を使用してオブジェクト形式に「シリアル化」されるようにすることです。 呼び出し時に、すべてのメソッドが削除され、提示されたプロパティで機能するという事実をそのまま利用できます。
最後は「正気の」アプローチですが、通常使用するのが「created_at」の順序である場合、すべての操作でそのようにデータを「保存」する方がはるかに理にかなっているため、データを「取得」してもデータは使用する注文。