У меня есть массив внутри документа, состоящий из местоположений и типа местоположения. Я пытаюсь получить местоположение, наиболее близкое к определенному положению определенного типа. После 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'
}
}
}
]