2

Mongoose スキーマには次のものが含まれます。

{
  dueDate: { type: Date, required: false }
}

私の目標は、dueDate でソートされたドキュメントを取得し、最も早い日付を一番上にして、その後に dueDate のない残りの日付を取得することです。私の問題は、期日が必要ないため、dueDate のないドキュメントが有効な日付のドキュメントの上にソートされることです。

これは私がそれをソートする方法です(node.js&mongoose.js):

query.sort({ dueDate: 'asc' });

私は主にこれを行うための組み込みの方法を探しています。クエリを組み合わせてハックを実装しました。

4

2 に答える 2

2

これは、日付フィールドごとに 1 つの追加フィールドをソートする必要がある日付タイプの回避策です (このソリューションは数値にも使用できます)。

  1. この新しいフィールドに、null 以外の日付 (または数値の -ve) の負のエポックを格納します。

  2. 日付の昇順で並べ替えるとは、この -ve epoch で降順に並べ替えることを意味します。Null は、MongoDB がデータを降順でソートする方法であるため、最後になります。実際の日付 (または数値) フィールドは昇順で表示され、末尾が null になります。

  3. 日付 (または数値) を降順で並べ替えているときに null が必要な場合は、-ve エポックではなく、元の日付 (または数値) フィールドで並べ替えます。

于 2016-09-03T06:11:24.997 に答える
1

それを行う方法は組み込まれていません。ヘルパーがカスタマイズされた並べ替え機能を実行できるようにするために開かれたチケットがあります。これは計画されていますが、スケジュールされていません: https://jira.mongodb.org/browse/SERVER-153

このスレッドを確認してください: mongodb/mongoid でソートするときに、すべての nil 値を最後に配置する方法はありますか?

よろしく、 モアシー

于 2013-04-24T02:46:06.800 に答える