8

テンプレートの {{#each}} で使用するために、コレクション内のすべてのドキュメントを返そうとしています。私のコードは次のようになります。

return Answers.find({}, {sort: {$natural:-1}})

ただし、ドキュメントは自然な順序で返されます (逆順ではありません)。誰かが理由を知っていますか?MongoDB ドキュメントから $natural セレクターを取得したので、何が問題なのかわかりません。

4

4 に答える 4

3

逆の順序で返さない理由がわかりません。

array.sort()ただし、テンプレート ヘルパー メソッドで配列を作成し、またはarray.reverse()関数を使用して配列の逆を返すことができます。

例:Answersコレクションが次のようになっているとします。

Answers({ansNo: 1, ansBody: "body1"},
        {ansNo: 2, ansBody: "body2"},
        {ansNo: 3, ansBody: "body3"});

返される配列は次のとおりです。

var AnswersArr = new Array();

次に、テンプレートヘルパーで:->

var tempCollection = Answers.find({});
tempCollection.forEach(function(data){
    var obj = {ansNo: data.asnNo, ansBody: data.ansBody};
    AnswersArr.push(abj);
});

AnswersArr.sort(function(a, b){return b.ansNo - a.ansNo;});  //sort in reverse order

return AnswersArr;
于 2012-11-26T10:01:20.350 に答える
1

Sortはパラメーターではなく、結果のCursorオブジェクトでfind()の後に呼び出される別の関数です。これは、MongoDB のドキュメントで参照されている方法であり、MongoJS などのドライバーで動作します。

return Answers.find().sort({$natural: -1});

Meteor は、 Cursorの実装にsort()関数を追加していないようです。そのため、別の解決策は、日付に基づいて生成される_idフィールド (したがって挿入順序) でソートすることです。

return Answers.find({}, {sort: {'_id': -1}});
于 2013-02-27T23:49:12.027 に答える
0

ここで「自然秩序」の定義を混乱させているのではないかと思います。一方では、文字/文字列 (A、B、C...) と数字 (1、2、3...) の自然な並べ替え順序があります。

しかし、mongo の場合、「自然」とは、データがディスクに書き込まれた順序を指します。'{$natural:1}' は 'ディスク上に存在する順序でドキュメント...' を返すため、'{$natural:-1}' はそれを逆にします ( http://docs.mongodb.org/manual/reference /operator/meta/natural/ )。

したがって、データを書き込むコードと、データがどのようにディスクに書き込まれたかについての洞察がなければ、データが正しく機能していないという仮説を検証することはできません。

于 2015-06-25T02:28:49.190 に答える