How to make $lookup in MongoDB work with _id?

50 views Asked by At

Hi I have problem with not working lookup when I use _id from produkt. I store produkt id's in kategoria id_produktow array. I want to show kategoria nazwa and id_produktow as produkt nazwa. Kategoria:

[
  {
    "_id": "5fbbf3c9f3a7db3368a78f3c",
    "nazwa": "Napoje",
    "id_produktow": [
      "5fbbf56cfb0d77336818500e",
      "5fbbf56cfb0d77336818500f",
      "5fbbf56cfb0d773368185010"
    ]
  },
  {
    "_id": "5fbbf3c9f3a7db3368a78f3d",
    "nazwa": "Słodycze",
    "id_produktow": [
      "5fbbf56cfb0d773368185011",
      "5fbbf56cfb0d773368185012",
      "5fbbf56cfb0d773368185013"
    ]
  },
  {
    "_id": "5fbbf3c9f3a7db3368a78f3e",
    "nazwa": "Pieczywo",
    "id_produktow": [
      "5fbbf56cfb0d773368185014",
      "5fbbf56cfb0d773368185015",
      "5fbbf56cfb0d773368185016"
    ]
  }
]

Produkt:

[
  {
    "_id": "5fbbf56cfb0d77336818500e",
    "nazwa": "Cola",
    "cena": "3.99",
    "opis": "Dwa litry popularnego napoju, którego nie może zabraknąc na Twoim stole."
  },
  {
    "_id": "5fbbf56cfb0d77336818500f",
    "nazwa": "Woda",
    "cena": "1.99",
    "opis": "Półtora litra nojpopularniejszego płynu na ziemi."
  },
  {
    "_id": "5fbbf56cfb0d773368185010",
    "nazwa": "Mleko",
    "cena": "2.49",
    "opis": "Pyszne mleko prosto od krowy."
  },
  {
    "_id": "5fbbf56cfb0d773368185011",
    "nazwa": "Żelki",
    "cena": "2.99",
    "opis": "Żelki z owocowym wypełnieniem."
  },
  {
    "_id": "5fbbf56cfb0d773368185012",
    "nazwa": "Cukierki",
    "cena": "1.99",
    "opis": "Cukierki z nadzieniem czekoladowym."
  },
  {
    "_id": "5fbbf56cfb0d773368185013",
    "nazwa": "Lizak",
    "cena": "0.99",
    "opis": "Lizak o smaku truskawkowym."
  },
  {
    "_id": "5fbbf56cfb0d773368185014",
    "nazwa": "Chleb",
    "cena": "2.49",
    "opis": "Świeży chleb z naturalnych składników."
  },
  {
    "_id": "5fbbf56cfb0d773368185015",
    "nazwa": "Bułka",
    "cena": "0.49",
    "opis": "Mięciutka bułka, gotowa być zjedzona na śniadanie."
  },
  {
    "_id": "5fbbf56cfb0d773368185016",
    "nazwa": "Bagietka",
    "cena": "1.99",
    "opis": "Długa bagietka dla smakoszy."
  }
]

Query:

db.Kategoria.aggregate(
  {
  $lookup: {
    from: 'Produkt',
    localField: 'id_produktow',
    foreignField: '_id',
    as: 'string'
  }}
)

Result:

[
  {
    _id: ObjectId("5fbbf3c9f3a7db3368a78f3c"),
    nazwa: 'Napoje',
    id_produktow: [
      '5fbbf56cfb0d77336818500e',
      '5fbbf56cfb0d77336818500f',
      '5fbbf56cfb0d773368185010'
    ],
    string: []
  },
  {
    _id: ObjectId("5fbbf3c9f3a7db3368a78f3d"),
    nazwa: 'Słodycze',
    id_produktow: [
      '5fbbf56cfb0d773368185011',
      '5fbbf56cfb0d773368185012',
      '5fbbf56cfb0d773368185013'
    ],
    string: []
  },
  {
    _id: ObjectId("5fbbf3c9f3a7db3368a78f3e"),
    nazwa: 'Pieczywo',
    id_produktow: [
      '5fbbf56cfb0d773368185014',
      '5fbbf56cfb0d773368185015',
      '5fbbf56cfb0d773368185016'
    ],
    string: []
  }
]

Why there is no result? I tried to change id numbers for nazwa like Cola and it works, but I want to have id numbers. I searched and nothing works.Maybe there is some way to cast produkt _id to string when using db.Kategoria.aggregate then I think it should work.

0

There are 0 answers