Агрегация MongoDB сортирует документы по значению внутри массива в позиции, где массив имеет конкретное значение - PullRequest
1 голос
/ 11 марта 2019

Мы ищем способ сортировки документов по значению, которое находится в массиве внутри документа.Особенность заключается в том, что мы хотим отсортировать только по значению, когда другое свойство имеет определенное значение.

Вот так выглядят наши документы:

{
  _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.Другая проблема заключалась в том, что, когда мы использовали $unwind, другие значения внутри массива элементов будут удалены, если в качестве ключа не указано locationName, поэтому key: address будет удален, а возвращенные документы будут иметь объект вместо массива.который выглядит так:

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

Итак, наша идея состояла в том, чтобы создать новое поле в агрегации, которое содержит locationName.Мы знаем, что есть операция $addFields, но в нашем случае наша версия mongodb слишком мала (мы используем 3.2), поэтому мы хотели бы найти решение без $addFields.

Мы не уверены, чтоэто возможно, что мы хотим сделать, или если это невозможно с нашей текущей версией mongoDB.Может быть, у одного из вас есть идея, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...