MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Rufen Sie Daten aus 2 Sammlungen in Mongodb in einer einzigen Abfrage ab

Sie können die folgende Aggregation mit mongodb 3.6 ausprobieren und höher, aber ich denke, Sie sollten zwei Abfragen verwenden, da für den großen Datensatz $lookup Pipeline wird das BSON-Limit verletzen von 16 MB . Aber es hängt auch von Ihrem $match ab Bedingung oder $limit . Wenn sie auf $lookup Pipeline, dann würde Ihre Aggregation perfekt funktionieren.

db.OrderType1.aggregate([
  { "$limit": 1 },
  { "$facet": {
    "collection1": [
      { "$limit": 1 },
      { "$lookup": {
        "from": "OrderType1",
        "pipeline": [{ "$match": { } }],
        "as": "collection1"
      }}
    ],
    "collection2": [
      { "$limit": 1 },
      { "$lookup": {
        "from": "OrderType2",
        "pipeline": [{ "$match": { } }],
        "as": "collection2"
      }}
    ]
  }},
  { "$project": {
    "data": {
      "$concatArrays": [
        { "$arrayElemAt": ["$collection1.collection1", 0] },
        { "$arrayElemAt": ["$collection2.collection2", 0] },
      ]
    }
  }},
  { "$unwind": "$data" },
  { "$replaceRoot": { "newRoot": "$data" } }
])