MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come posso chiamare le proprietà che si trovano in un'altra raccolta in un sottoarray?

Ci possono essere molti modi, un modo è usare $lookup come hai già provato

db.place.aggregate([
  { "$match": { "place": "Room 5" } },
  { $unwind: "$type_place_objects"  },
  {
    "$lookup": {
      "from": "type_place",
      "let": { tpo: "$type_place_objects._id" },
      "pipeline": [
        { $unwind: "$objects" },
        {
          $match: {
            $expr: {
              $eq: [ "$objects._id", "$$tpo" ]
            }
          }
        }
      ],
      "as": "join"
    }
  },
  {
    $addFields: {
      "join": { "$arrayElemAt": [ "$join", 0]
      }
    }
  },
  {
    $addFields: { "type_place_objects.name": "$join.objects.name" }
  },
  {
    $group: {
      _id: "$_id",
      place: { $first: "$place" },
      type_place_objects: { "$addToSet": "$type_place_objects" }
    }
  }
])

Lavoro parco giochi Mongo