代码之家  ›  专栏  ›  技术社区  ›  TJR

MongoDB聚合按数组中数组具有特定值的位置上的值对文档进行排序

  •  0
  • TJR  · 技术社区  · 6 年前

    我们正在寻找一种方法,根据文档内部数组中的值对文档进行排序。特别的是,我们只想按另一个属性具有特定值的值排序。

    我们的文档就是这样的:

    {
      _id: '1',
      elements: [
        {
          key: 'locationName',
          value: 'A value'
        },
        {
          key: 'address',
          value: 'Somewhere over the rainbow'
        },
      ],
    },
    {
      _id: '2',
      elements: [
        {
          key: 'address',
          value: 'Far far away'
        },
        {
          key: 'locationName',
          value: 'Another value'
        },
      ],
    },
    {
      _id: '3',
      elements: [],
    }
    

    elements.$.key === 'locationName'

    玩过之后 $unwind $match 我们能够对文档进行排序-但是通过展开数组并匹配 key === 'locationName' 示例中的最后一个文档将被“删除”,因为此文档的匹配失败。当然,我们也希望列出没有给出位置名称的文档。另一个问题是当我们使用 如果没有locationName作为键,则元素数组中的其他值将被删除,因此 key: address 将被删除,返回的文档将包含一个对象,而不是一个如下所示的数组:

    {
      _id: '1',
      elements: {
        key: 'locationName',
        value: 'A value'
      },
    },
    {
      _id: '2',
      elements: {
        key: 'locationName',
        value: 'Another value'
      },
    }
    

    所以我们的想法是在聚合中创建一个新字段,其中包含 locationName . 我们知道 $addFields 操作,但在我们的例子中,mongodb版本太低(我们使用的是3.2),所以我们希望找到一个没有 $添加字段

    0 回复  |  直到 6 年前