No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

3D
2H
29M
34S

Relaciones 1 a muchos referenciadas

16/22
Recursos

Aportes 6

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

pipeline => Permite omitir campos del otro documento que no quiero traer, es de buen uso cuando por ejemplo quiero traer una order y usuario, pero por seguridad no retornar el password del usuario.

db.inventory2.aggregate([
    {
        $match: ObjectId('12e21j321321') 
    },
    {
        $lookup: {
            pipeline: [
                {$project: {identification_number: 0, password: 0, createdAt: 0, updatedAt: 0, token: 0}},
            ],
            from :'inventory1',
            localField: 'iduser',
            foreignField: 'iduser',
            as: 'detail'
        }
    },
    {
        $unwind: '$detail'
    }
])

Solucion al reto 馃槃
en $match: el id del user que quiero consultar

db.users.aggregate([
    {
        $match: {
          _id: ObjectId('63c1656be362e371c8e95a45')
        }
    },
    {
        $lookup: {
          from: 'orders', 
          localField: '_id', 
          foreignField: 'user_id', 
          as: 'order'
        }
    }
])

Es importante no abusar del uso del $lookup, sobre todo cuando tienen muchos (miles o millones) de documentos y se quieren sacar datos de varias otras collecciones. Ahi la performance de aggregate se reduce bastante.

Me gusta tu curso, pero hubiese sido m谩s facil de explicar poniendo un caso con un ID fijo en lugar del ObjectID, sinceramente me he perdido.

Muestra las ordenes de cada usuario segun el id dado en el $match

Usando projection en ambas colecciones

use("platzi_store")

// muestra todas las ordenes de un usuario
//omitiendo la 'password', y el 'user_id' de referencia de cada orden
db.users.aggregate([
  {
    $match: {
      _id: ObjectId('63dc480941d8383c5926809e')
    }
  },
  {    
    /**
     * from: The target collection.
     * localField: The local join field.
     * foreignField: The target join field.
     * as: The name for the results.
     * pipeline: Optional pipeline to run on the foreign collection.
     * let: Optional variables to use in the pipeline field stages.
     */
    $lookup: {
      from: 'orders',
      localField: '_id',
      foreignField: 'user_id',
      as: 'orders_list',
      pipeline: [ //Aqui podemos hacer operaciones para la colecci贸n secundaria
        {
          /**
           * specifications: The fields to
           *   include or exclude.
           */
          $project: {
            'user_id': 0, // de la colecci贸n [orders]
          }
        }
      ],
    }
  },
  {
    /**
     * specifications: The fields to
     *   include or exclude.
     */
    $project: {
      'password': 0, //de la colecci贸n [users]
    }
  }
])

Resultado

[
  {
    "_id": {
      "$oid": "63dc480941d8383c5926809e"
    },
    "email": "[email protected]",
    "role": "admin",
    "social_accounts": [
      "twitter",
      "Facebook"
    ],
    "address": {
      "street": "cc 891",
      "city": "Bogota",
      "zip": "11011"
    },
    "shipping_adres": {
      "street": "cc 2342",
      "city": "Bogota",
      "zip": "22022"
    },
    "orders_list": [
      {
        "_id": {
          "$oid": "63dc5ccc617a08ee3ec6c213"
        },
        "date": "Thu Feb 02 2023 22:01:00 GMT-0300 (Brasilia Standard Time)",
        "item": [
          {
            "name": "camiseta",
            "price": 120,
            "qty": 2
          },
          {
            "name": "jeans",
            "price": 300,
            "qty": 1
          },
          {
            "name": "gorra",
            "price": 50,
            "qty": 1
          }
        ]
      },
      {
        "_id": {
          "$oid": "63dc5f4ad9dbf4f7eb40655c"
        },
        "date": "Thu Feb 02 2023 22:11:38 GMT-0300 (Brasilia Standard Time)",
        "item": [
          {
            "name": "short",
            "price": 23,
            "qty": 2
          }
        ]
      }
    ]
  }
]

Al momento de consultar por 1:n o n:n desde el punto de vista de base de datos debemos hacer estas b煤squedas completas, pero cuando estamos en un producto real, puede o no verse como las b煤squedas que hace el profesor