MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Agregasi MongoDb:Bagaimana saya bisa mengelompokkan array-1 berdasarkan array-2 lain ketika diberikan array-1 dan array-2?

Jika saya telah memahami postingan "teka-teki" dengan benar (Judul postingan dan EDIT adalah kasus penggunaan yang berbeda), kita bisa mendapatkan hasil yang diinginkan dengan satu $lookup :

db.poll.aggregate([
  {
    "$match": {
      "_id": 100
    }
  },
  {
    "$lookup": {
      "from": "castedvotes",
      "localField": "pollId",
      "foreignField": "choices.id",
      "as": "voters"
    }
  },
  {
    $project: {
      numberOfVotes: {
        $size: "$voters"
      },
      hasThisUserVoted: {
        $in: [
          "$_id",
          "$voters.pollId"
        ]
      },
      /**How to calculate it?*/
      numberOfComments: {
        $multiply: [
          {
            $size: "$voters"
          },
          2
        ]
      },
      castedVotesPerChoice: {
        $arrayToObject: {
          $map: {
            input: "$choices",
            as: "choice",
            in: {
              k: "$$choice.name",
              v: {
                $filter: {
                  input: "$voters",
                  as: "voter",
                  cond: {
                    $eq: [
                      "$$voter.choice",
                      "$$choice.id"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    }
  }
])

MongoPlayground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb cara mendapatkan nilai maksimal dari koleksi

  2. Temukan url duplikat di mongodb

  3. Hapus Objek dari Array Bersarang dengan Beberapa Kriteria

  4. Panggil fungsi di dalam agregat mongodb?

  5. Pulihkan Basis Data MongoDB menggunakan mongorestore