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

Hvordan kan jeg kalde de egenskaber, der er i en anden samling i et underarray?

Der kan være mange måder, én måde er at bruge $lookup som du allerede har prøvet

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

Arbejd Mongo legeplads




  1. Gem indlejret hash i redis via en node.js-app

  2. Tester mongocxx c++ driver med en prøvekode

  3. Få sorteret distinkte værdier med MongoTemplate

  4. Sådan skriver du et tomt associativt array ({}) til MongoDB fra PHP