首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只对现有字段进行排序

只对现有字段进行排序
EN

Stack Overflow用户
提问于 2017-10-10 13:33:13
回答 2查看 76关注 0票数 1

我有这样的收藏品。只有少数用户有sortOrder字段

代码语言:javascript
复制
[{
    "_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})排序时,我得到了这个

代码语言:javascript
复制
[{
    "_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字段)

代码语言:javascript
复制
[ {
   "_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 ",
}]

我应该写什么查询才能得到这个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-10 14:04:14

代码语言:javascript
复制
db.collection.aggregate([
{$project : {"_id" : 1, "sortOrder" : 1,"name":1, "sortOrder": { "$ifNull": [ "$sortOrder", ""] }}},
{$sort : {sortOrder : 1}}   
])
票数 2
EN

Stack Overflow用户

发布于 2017-10-10 13:48:25

您可以使用回调以几乎任何方式处理该类型。

虽然我的解决方案效率低得令人讨厌(对不起),但它有效:

代码语言:javascript
复制
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将其移回数组的后面,如果这是合理的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46668131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档