只对现有字段sorting
我有这样的collections。 只有less数用户具有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, }]
但我需要像这样sorting集合(顶部的字段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 ", }]
我应该写什么查询来获得这个?
db.collection.aggregate([{$ project:{“_id”:1,“sortOrder”:1,“name”:1,“sortOrder”:{“$ ifNull”:[“$ sortOrder”,“”]} }},{$ sort:{sortOrder:1}}
])
您几乎可以使用callback来处理sorting。
虽然我的解决scheme是令人厌恶的低效率(对不起),它的工作原理:
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和bvariables是数组中的元素,这里返回-1将它移动到数组的前面,0不改变,1移回数组,如果这是有道理的。
- 在q-io / http.request上进行ETIMEDOUT
- 用mongodb保存node.js的asynchronous性质的多个数据
- 像nodeJs中的参数那样传递csv文件
- embedded式JS Partials – 确定用户是否已login
- 从现有代理实例中检索原始目标对象
- Node.js写入subprocess
- React和Grunt – Envify NODE_ENV ='production'和UglifyJS
- Node.js / Sails.js – forEach循环中的函数
- Jest错误:无法获取模拟元数据:node_modules / core-js / modules / $。global.js