我有这样的收藏品。只有少数用户有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 ",
}]我应该写什么查询才能得到这个?
发布于 2017-10-10 14:04:14
db.collection.aggregate([
{$project : {"_id" : 1, "sortOrder" : 1,"name":1, "sortOrder": { "$ifNull": [ "$sortOrder", ""] }}},
{$sort : {sortOrder : 1}}
])发布于 2017-10-10 13:48:25
您可以使用回调以几乎任何方式处理该类型。
虽然我的解决方案效率低得令人讨厌(对不起),但它有效:
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将其移回数组的后面,如果这是合理的话。
https://stackoverflow.com/questions/46668131
复制相似问题