Отфильтровать массив в агрегатах $ geoNear - PullRequest
0 голосов
/ 21 января 2020

У меня есть массив внутри документа, состоящий из местоположений и типа местоположения. Я пытаюсь получить местоположение, наиболее близкое к определенному положению определенного типа. После geoNear у меня должен быть массив только с типом дома. Однако, если какой-либо элемент в массиве вложенных документов имеет тип home, он возвращает весь документ, а не фильтрует. Я пробовал $ filter и $ elemMatch, но не повезло

{
    locations: [
        {
            coordinates: {type: "Point", coordinates: [-87.83, 31.48]},
            type: 'home'
        },
        {
            coordinates: {type: "Point", coordinates: [-87.83, 31.48]},
            type: 'home'
        },
        {
            coordinates: {type: "Point", coordinates: [-87.83, 31.48]},
            type: 'office'
        }
    ]
}
[
  {
    '$geoNear': {
      'near': [
        -82.39, 29.90
      ], 
      'query': {
        'locations.type': 'home'
      }, 
      'distanceField': 'dist.calculated', 
      'spherical': true, 
      'includeLocs': 'dist.location'
    }
  }, {
    '$unwind': {
      'path': '$locations'
    }
  }, {
    '$redact': {
      '$cond': {
        'if': {
          '$eq': [
            {
              '$cmp': [
                '$locations.coordinates', '$dist.location'
              ]
            }, 0
          ]
        }, 
        'then': '$$KEEP', 
        'else': '$$PRUNE'
      }
    }
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...