MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

$ lookup mảng lồng nhau trong mongodb

Nếu bạn có phiên bản mongodb 3.6 thì bạn có thể thử với $lookup lồng nhau tổng hợp ...

db.collection.aggregate([
  { "$lookup": {
    "from": Albums.collection.name,
    "let": { "albums": "$albums" },
    "pipeline": [
       { "$match": { "$expr": { "$in": [ "$_id", "$$albums" ] } } },
       { "$lookup": {
         "from": Songs.collection.name,
         "let": { "songs": "$songs" },
         "pipeline": [
           { "$match": { "$expr": { "$in": [ "$_id", "$$songs" ] } } }
         ],
         "as": "songs"
       }}
     ],
     "as": "albums"
  }}
 ])

Và để giải thích dài dòng, bạn có thể xem qua $ tra cứu nhiều cấp mà không cần $ thư giãn?

Hoặc Nếu bạn có phiên bản mongodb trước 3.6

db.collection.aggregate([
  { "$lookup": {
    "from": Albums.collection.name,
    "localField": "albums",
    "foreignField": "_id",
    "as": "albums"
  }},
  { "$unwind": "$albums" },
  { "$lookup": {
    "from": Songs.collection.name,
    "localField": "albums.songs",
    "foreignField": "_id",
    "as": "albums.songs",
  }},
  { "$group": {
    "_id": "$_id",
    "name": { "$first": "$name" },
    "started_in": { "$first": "$started_in" },
    "active": { "$first": "$active" },
    "country": { "$first": "$country" },
    "albums": {
      "$push": {
        "_id": "$albums._id",
        "title": "$albums.title",
        "released": "$albums.released",
        "type": "$albums.type",
        "songs": "$albums.songs"
      }
    }
  }}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chèn hàng loạt Mongoose (mongodb)?

  2. JSR223 (Groovy) không thể truy cập MongoDB (3.0.3) trong Jmeter (2.13)

  3. Nhân trường với giá trị trong Mongodb

  4. Truy vấn sử dụng phạm vi ngày trong MongoDB trong Java

  5. chạy nhiều phiên bản mongod dưới dạng dịch vụ