MongoDB 数据不对称 return,数组中的第一项 return 完整,其余部分省略了某些属性?

MongoDB assymetrical return of data, first item in array returned in full, the rest with certain properties omitted?

我是 MongoDB 的新手,正在掌握它的语法和功能。为了实现标题中描述的功能,我相信我可以创建一个承诺,该承诺将 运行 对文档进行 2 个同时查询 - 一个用于获取数组中一项的全部内容(或至少是省略的数据)在另一个查询中,到 re-add 之后),按最近日期搜索,另一个到 return 数组减去特定属性。我有以下文件:

{ 
  _id : ObjectId('5rtgwr6gsrtbsr6hsfbsr6bdrfyb'),
  uuid : 'something',
  mainArray : [
      {
          id : 1,
          title: 'A',
          date: 05/06/2020,
          array: ['lots','off','stuff']
      },
      {
          id : 2,
          title: 'B',
          date: 28/05/2020,
          array: ['even','more','stuff']
      },
      {
          id : 3,
          title: 'C',
          date: 27/05/2020,
          array: ['mountains','of','knowledge']
      }
  ]
}

我想 return

{ 
  uuid : 'something',
  mainArray : [
      {
          id : 1,
          title: 'A',
          date: 05/06/2020,
          array: ['lots','off','stuff']
      },
      {
          id : 2,
          title: 'B'
      },
      {
          id : 3,
          title: 'C'
      }
  ]
}

与构建一个可实现此目的的查询相比,promise 方法的有效性和性能如何?我不知道如何在 MongoDB 中执行这样的 'combined-rule'/条件,如果有人能举个例子吗?

如果您要省略的子文档数组不是很大。我只是在应用程序端删除它。在 MongoDB 中进行处理意味着您选择使用 MongoDB 的计算资源而不是您的应用程序。一般来说,您的应用程序更容易扩展且成本更低,因此最好在应用程序层实施。

但在这种情况下,在 MongoDB 中实现它并不太复杂:

db.collection.aggregate([
  {
    $addFields: { // keep the first element somewhere
      first: { $arrayElemAt: [ "$mainArray", 0] }
    }
  },
  {
    $project: { // remove the subdocument field
      "mainArray.array": false
    }
  },
  {
    $addFields: { // join the first element with the rest of the transformed array
      mainArray: {
        $concatArrays: [
          [ // first element
            "$first"
          ],
          { // select elements from the transformed array except the first
            $slice: ["$mainArray", 1, { $size: "$mainArray" }]
          }
        ]
      }
    }
  },
  {
    $project: { // remove the temporary first elemnt
      "first": false
    }
  }
])

MongoDB Playground