He estado luchando con esto por un tiempo. Tengo datos estatales y de casas de vacaciones. Necesito encontrar el número de cada tipo de casa de vacaciones y devolver el tipo de propiedades que tienen la mayor y menor cantidad de ubicaciones. He podido agrupar por estado y contar la cantidad de propiedades en una matriz. Solo necesito sacar la mayor y menor propiedad.

Los datos que tengo ...

{'_id': 'CA', 'properties': [{'property_type': 'Camper/RV', 'quantity': 1}, {'property_type': 'Hostel', 'quantity': 2}, ...]}
{'_id': 'BR', 'properties': [{'property_type': 'Guest suite', 'quantity': 3}, {'property_type': 'Bed and breakfast', 'quantity': 7}, ...]}
...

Y quiero escribir una consulta que devuelva datos que se vean así

{'_id': 'TR', 'most_type': 'Apartment', 'most_number': 53, 'least_type': 'Camper/RV', 'least_number': 5}
{'_id': 'CA', 'most_type': 'House', 'most_number': 53, 'least_type': 'TinyHouse', 'least_number': 3}
...
0
James Ayres 13 mar. 2021 a las 23:32

1 respuesta

La mejor respuesta

Utiliza un agregado

db.collection.aggregate([
  {
    "$unwind": "$properties"
  },
  {
    "$sort": {
      "properties.quantity": -1
    }
  },
  {
    "$group": {
      "_id": "$_id",
      "most_type": {
        "$first": "$properties.property_type"
      },
      "most_number": {
        "$first": "$properties.quantity"
      },
      "least_type": {
        "$last": "$properties.property_type"
      },
      "least_number": {
        "$last": "$properties.quantity"
      }
    }
  }
])

Pruébelo aquí

1
AlexisG 14 mar. 2021 a las 07:51