MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да агрегирам вложен масив за търсене в mongoose?

  • $lookup с user колекция
  • $unwind деконструирайте id_user масив
  • $lookup с language събиране и връщане на languages поле
  • $map за повторение на вида на id_user.language масив
  • $reduce за итериране на цикъл от languages масив, върнат от колекция, проверете условието, ако language_id съответства, след което връща name
db.cvsubmit.aggregate([
  {
    $lookup: {
      from: "user",
      localField: "id_user",
      foreignField: "_id",
      as: "id_user"
    }
  },
  { $unwind: "$id_user" },
  {
    $lookup: {
      from: "language",
      localField: "id_user.language.language_id",
      foreignField: "_id",
      as: "languages"
    }
  },
  {
    $addFields: {
      languages: "$$REMOVE",
      "id_user.language": {
        $map: {
          input: "$id_user.language",
          as: "l",
          in: {
            _id: "$$l._id",
            level: "$$l.level",
            name: {
              $reduce: {
                input: "$languages",
                initialValue: "",
                in: {
                  $cond: [
                    { $eq: ["$$this._id", "$$l.language_id"] },
                    "$$this.name",
                    "$$value"
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
])

Playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Не може да се изтрие от колекцията на mongodb angular MEAN стек

  2. Колекция за преименуване на Mongoose

  3. Как да актуализирам вграден документ в mongoose?

  4. Трябва ли да използвам разреден индекс за булеви флагове в mongodb?

  5. Как мога да принудя Spring Data да ми покаже плана за заявка на mongo (a.k.a cursor.explain())