2017-10-10 57 views
1

我有這樣的集合。 只有少數用戶有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, 
}] 

當我排序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

[ { 
    "_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 /問題/ 32680809/MongoDB的排序逐場存在的,和當時的字母 –

回答

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會將它移回數組,如果這是有道理的。