MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

agregacja mangusty, jak mapować wiele kolekcji w jedną tablicę

W takiej sytuacji$facet pomoc w kategoryzacji przychodzących danych

db.Collection_A.aggregate([
  { $unwind: "$includes },
  {
    "$facet": {
      "joinB": [            
        {
          "$lookup": {
            "from": "Collection_B", "localField": "includes.includes_id",
            "foreignField": "_id", "as": "includes.includes_list"
          }
        },
        {
          "$group": {
            "_id": "$_id",
            "name": { "$first": "$name" },
            includes: { $push: "$includes" }
          }
        }
      ],
      "joinC": [            
        {
          "$lookup": {
            "from": "Collection_C", "localField": "includes.includes_id",
            "foreignField": "_id", "as": "includes.includes_list"
          }
        },
        {
          "$group": {
            "_id": "$_id",
            "name": { "$first": "$name" },
            includes: { $push: "$includes" }
          }
        }
      ],
      "joinD": [
        {
          "$lookup": {
            "from": "Collection_D", "localField": "includes.includes_id",
            "foreignField": "_id", "as": "includes.includes_list"
          }
        },
        {
          "$group": {
            "_id": "$_id",
            "name": { "$first": "$name" },
            includes: { $push: "$includes" }
          }
        }
      ],
      
    }
  },
  {
    $project: {
      combined: {
        "$concatArrays": [ "$joinB", "$joinC", "$joinD" ]
      }
    }
  },
  { "$unwind": "$combined" },
  {
    "$replaceRoot": { "newRoot": "$combined" }
  },
  {
    "$project": {
      _id: 1,
      name: 1,
      includes: {
        $filter: {
          input: "$includes",
          cond: {
            $ne: [ "$$this.includes_list",[] ]
          }
        }
      }
    }
  }
])

Praca Plac zabaw Mongo

Uwaga:czuję, że jest to rodzaj anty-wzoru, za którym podążasz. Jeśli jesteś na wczesnym etapie projektu, lepiej zmień strukturę, jeśli się nie mylę.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wyszukiwanie tekstowe mongodb przy użyciu wielu języków

  2. Dlaczego przed identyfikatorem dokumentu MongoDb znajduje się podkreślenie?

  3. SyntaxError:nieprawidłowy identyfikator właściwości — MongoDB

  4. $ odpowiednik push dla mapy w mongo

  5. InsertMany nie działa w mongodb