2017-10-10 53 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会将它移回数组,如果这是有道理的。