Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb/mongoose-按两个字段排序_Javascript_Arrays_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript mongodb/mongoose-按两个字段排序

Javascript mongodb/mongoose-按两个字段排序,javascript,arrays,node.js,mongodb,mongoose,Javascript,Arrays,Node.js,Mongodb,Mongoose,我有两个字段: 日期(ISODate) 值(它是一个数字——但也可以是未定义的) 我想以一种特定的方式对它们进行分类 首先-按值排序。如果存在(而不是未定义的),让它们先来。如果value未定义,则将这些对象推到末尾 其次-按日期排序。现在,我们将按照值对所有内容进行排序。但是现在我想按日期对它进行排序 预期结果: 当前解决方案: 然而,它在某些情况下失败了,不幸的是,我无法发现为什么它有时会以错误的方式进行排序。但它确实 先谢谢你 要实现这一点,您可以将聚合与$cond一起使用 在Mon

我有两个字段:

  • 日期(
    ISODate
  • 值(它是一个
    数字
    ——但也可以是
    未定义的

我想以一种特定的方式对它们进行分类

首先-按
值排序
。如果存在(而不是
未定义的
),让它们先来。如果
value
未定义,则将这些对象推到末尾

其次-按日期排序。现在,我们将按照
值对所有内容进行排序。但是现在我想按日期对它进行排序

预期结果: 当前解决方案: 然而,它在某些情况下失败了,不幸的是,我无法发现为什么它有时会以错误的方式进行排序。但它确实

先谢谢你

要实现这一点,您可以将
聚合
$cond
一起使用

在MongoGUI中测试

猫鼬中的聚集物:

Model.aggregate([
  {
    $project:
    {
      "id": 1,
      "value": 1,
      "date": 1,
      sortValue: {
        $cond: {
          if: { $eq: ['$value', undefined] },
          then: 0,
          else: 1,
        },
      }
    }
  },
  {
    $sort:
    {
      "sortValue": -1,
      "value": 1,
      "date": -1
    }
  }
], function (err, result) {
  if (err) {
    console.log(err);
    return;
  }
  console.log(result);
});

说“它在某些方面失败了”是含糊不清的,毫无帮助的。预期的行为是什么?你看到了什么?请描述并提供一个简单的例子。如何将其用于猫鼬?
.sort({
  value: -1,
  date: -1
});
db.getCollection('collectionName').aggregate([
{
   $project :
       {
           "id" : 1,
           "value" : 1,
           "date": 1,
           sortValue: {
            $cond: {
              if: { $eq: ['$value',undefined ]},
              then: 0, 
              else: 1,
            },
          }
       }
},
{
   $sort :
       {
           "sortValue" :-1,
           "value" : 1,
           "date" : -1
       }
}])
Model.aggregate([
  {
    $project:
    {
      "id": 1,
      "value": 1,
      "date": 1,
      sortValue: {
        $cond: {
          if: { $eq: ['$value', undefined] },
          then: 0,
          else: 1,
        },
      }
    }
  },
  {
    $sort:
    {
      "sortValue": -1,
      "value": 1,
      "date": -1
    }
  }
], function (err, result) {
  if (err) {
    console.log(err);
    return;
  }
  console.log(result);
});