Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Arrays 如何通过减去内部数组的长度对MongoDB中的文档进行排序?_Arrays_Mongodb_Sorting - Fatal编程技术网

Arrays 如何通过减去内部数组的长度对MongoDB中的文档进行排序?

Arrays 如何通过减去内部数组的长度对MongoDB中的文档进行排序?,arrays,mongodb,sorting,Arrays,Mongodb,Sorting,我正在从我的mongoDB数据库中检索数据,我希望能够通过减去内部数组的长度对文档进行排序。 我的数据结构如下所示: [ { _id: "6bcdf5b7-0757-4195-a0b6-d7ec3d59d194", status: { plus: ['1', '2'], minus: ['1'] }, { _id: "6fb2ea76-8f12-4200-98fa-72201ba5f8c1", status: { plus:

我正在从我的mongoDB数据库中检索数据,我希望能够通过减去内部数组的长度对文档进行排序。 我的数据结构如下所示:

[
  {
   _id: "6bcdf5b7-0757-4195-a0b6-d7ec3d59d194",
   status: {
      plus: ['1', '2'],
      minus: ['1']
  },
  {
   _id: "6fb2ea76-8f12-4200-98fa-72201ba5f8c1",
   status: {
      plus: ['1', '2', '3', '4'],
      minus: []
  },
  {
   _id:"b1ecf353-acea-4808-a847-27b765c52230"
   status: {
      plus: ['1', '2', '3'],
      minus: ['1', '2', '3']
  },
...
]
我要找的是一个文档数组,它是按长度减去
数组排序的

结果,我正在寻找:

[
   {
   _id: "6fb2ea76-8f12-4200-98fa-72201ba5f8c1",
   status: {
      plus: ['1', '2', '3', '4'],
      minus: [] // subtract - 4
  },
  {
   _id: "6bcdf5b7-0757-4195-a0b6-d7ec3d59d194",
   status: {
      plus: ['1', '2'],
      minus: ['1'] // subtrack - 1
  },

  {
   _id:"b1ecf353-acea-4808-a847-27b765c52230"
   status: {
      plus: ['1', '2', '3'],
      minus: ['1', '2', '3'] // subtrack - 0
  },
...
]
我找到了聚合框架,但我找不到一种方法以我的方式使用它

当然,文档中的属性要多得多,所以我认为分组并不是最好的方式

因此,我的最终结果如下所示:

   col.aggregate([
        {
          $project: {
            status_count: {
              $subtract: [
                { $size: { $ifNull: ['$status.plus', []] } },
                { $size: { $ifNull: ['$status.minus', []] } }
              ]
            }
          }
        },
        {
          $sort: { status_count: -1 }
        }
      ])

问题是:它失去了所有其他属性,包括状态对象、我无法使用其他用户查找查询、我无法跳过和限制分页

我不是傻瓜。投票重新开放。大多数链接答案都是使用stoneage的MongoDB和过时的方法。@DanFromGermany没有代码的问题,指出了他们需要做的两件事的用法示例。让提出问题的人读一些东西并学习如何。如果这个问题显示有人试图回答,那么也许一个更正它的答案就可以了。@NeilLunn我可以向您展示大量的代码,这些代码根本不起作用,或者根本不起作用。我已经找了好几天熟悉的问题,但它似乎不是一个流行的问题。你的相关问题都不接近我的主题,所以我不理解你的仇恨。谢谢。@VadimTorosyan请务必显示您的代码尝试。但我也建议您实际查看前面提到的示例并阅读它们,因为
$size
返回数组长度(相同的旧答案适用),而
$sort
是用于对预测值进行“排序”的阶段(相同的旧答案适用)。“减法”通常由一个名为
$subtract
的操作符完成。如果您在查看这些示例后仍然无法解决问题,请在问题中包含您尝试过的代码。但一定要尝试使用前面提到的运算符和它们的用法示例。@NeilLunn代码补充道。我类似于那个参数,我可以找到并按减法排序,但我失去了所有其他属性,并且能够对结果进行分页。不是重复。投票重新打开。大多数链接答案都是使用stoneage的MongoDB和过时的方法。@DanFromGermany没有代码的问题,指出了他们需要做的两件事的用法示例。让提出问题的人读一些东西并学习如何。如果这个问题显示有人试图回答,那么也许一个更正它的答案就可以了。@NeilLunn我可以向您展示大量的代码,这些代码根本不起作用,或者根本不起作用。我已经找了好几天熟悉的问题,但它似乎不是一个流行的问题。你的相关问题都不接近我的主题,所以我不理解你的仇恨。谢谢。@VadimTorosyan请务必显示您的代码尝试。但我也建议您实际查看前面提到的示例并阅读它们,因为
$size
返回数组长度(相同的旧答案适用),而
$sort
是用于对预测值进行“排序”的阶段(相同的旧答案适用)。“减法”通常由一个名为
$subtract
的操作符完成。如果您在查看这些示例后仍然无法解决问题,请在问题中包含您尝试过的代码。但一定要尝试使用前面提到的运算符和它们的用法示例。@NeilLunn代码补充道。我和那个参数很相似,我能够找到并按减法排序,但我失去了所有其他属性,并且能够对结果进行分页。