2017-10-10 3 views
1

私はこのようなコレクションを持っています。 私はソートsort({"sortOrder": 1})で、私はこの既存のフィールドのみをソート

[{ 
    "_id": "59ccf78bde3d14019169c105", 
    "name": "Best FX broker ", 
}, 
{ 
    "_id": "59ccf78bde3d14019169c104", 
    "name": "Best Regtech/ reporting solution ", 
}, 
{ 
    "_id": "59ccf78bde3d14019169c102", 
    "name": "Best automated Performance tool ", 
    "sortOrder": 1, 
}, 
{ 
    "_id": "59ccf78bde3d14019169c106", 
    "name": "NEW: BEST CRYPTO SERVICE PROVIDER", 
    "sortOrder": 2, 
}] 

を取得しかし、私は(一番上のフィールドsortOrderでの値)は、このようなコレクションをソートする必要がある場合にのみ、いくつかのユーザーがsortOrderフィールド

[{ 
    "_id": "59ccf78bde3d14019169c105", 
    "name": "Best FX broker ", 
}, 
{ 
    "_id": "59ccf78bde3d14019169c102", 
    "name": "Best automated Performance tool ", 
    "sortOrder": 1, 
}, 
{ 
    "_id": "59ccf78bde3d14019169c104", 
    "name": "Best Regtech/ reporting solution ", 
}, 
{ 
    "_id": "59ccf78bde3d14019169c106", 
    "name": "NEW: BEST CRYPTO SERVICE PROVIDER", 
    "sortOrder": 2, 
}] 

を持って

[ { 
    "_id": "59ccf78bde3d14019169c102", 
    "name": "Best automated Performance tool ", 
    "sortOrder": 1, 
}, 
{ 
    "_id": "59ccf78bde3d14019169c106", 
    "name": "NEW: BEST CRYPTO SERVICE PROVIDER", 
    "sortOrder": 2, 
}, 
{ 
    "_id": "59ccf78bde3d14019169c105", 
    "name": "Best FX broker ", 
}, 
{ 
    "_id": "59ccf78bde3d14019169c104", 
    "name": "Best Regtech/ reporting solution ", 
}] 

これを取得するにはどのようなクエリを書く必要がありますか?

+2

がサポートされていますが、いくつかの回避策/に他の方法がありますおそらくあなたが望むものを得るでしょう。 https://stackoverflow.com/questions/36028267/mongodb-sort-by-only-exists-entry-key-with-value-first-and-key-with-null-or-notおよびhttps:// stackoverflowを参照してください。 .com/questions/32680809/mongodb-sort-by-field-既存のアルファベット順 –

答えて

1

db.collection.aggregate([{$ project:{"_id":1、 "sortOrder":1、 "name":1、 "sortOrder":{"$ ifNull":["$ sortOrder" 、 ""]}}}、 {$ソート:{はsortOrder:1}}

])

それはあなたの正確なユースケースのようには見えません
0

コールバックを使用して、ほとんどどのような方法でもソートを処理できます。

私の解決策は、(ごめん)うんざり非効率的ですが、それは動作します:

array.sort(function (a, b) { 
    if (a.sortOrder == undefined && b.sortOrder == undefined) { 
    return 0; 
    } 
    if (a.sortOrder == undefined) { 
    return 1; 
    } 
    if (b.sortOrder == undefined) { 
    return -1; 
    } 
    if (a.sortOrder > b.sortOrder) { 
    return 1; 
    } 
    if (a.sortOrder < b.sortOrder) { 
    return -1; 
    } 

    return 0; 
}); 

ここで、AとBの変数が配列の要素であり、ここでは-1を返す配列の前に移動、0は変更されず、1は配列の後ろに移動します。

関連する問題