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

时间:2019-04-18 11:03:02

标签: arrays mongodb sorting

我正在从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']
  },
...
]

我正在寻找的-文档数组按长度plusminus数组的长度减去。

结果,我正在寻找:

[
   {
   _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 }
        }
      ])

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

0 个答案:

没有答案