sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik de eigenschappen die zich in een andere verzameling bevinden in een subarray oproepen?

Er kunnen veel manieren zijn, een manier is het gebruik van $lookup zoals je al hebt geprobeerd

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" }
    }
  }
])

Werkende Mongo-speeltuin




  1. Apache HBase I/O – HFile

  2. API Connect toont Cannot GET /apim/-fout bij bijwerken van schema

  3. Hoe gebruik je een dynamische variabelenaam in JavaScript zonder evaluatie voor een MongoDB-update?

  4. mongodb c# API V2:verschil tussen ReplaceOne en FindOneAndReplace