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

MongoDb Aggregation:Как мога да групирам масив-1 въз основа на друг масив-2, когато са дадени масив-1 и масив-2?

Ако съм разбрал правилно публикацията за "пъзела" (заглавие на публикацията и РЕДАКТИРАНЕ са различни случаи на използване), можем да получим желания резултат с един $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, докато флагът не бъде зададен?

  2. Mongoose.js създава множество връзки към MongoDB от едно извикване на connect().

  3. Как да получа датата на създаване на колекция MongoDB с помощта на драйвер на MongoDB C#?

  4. 5 начина да получите месеца от дата в MongoDB

  5. Проектиране на схема на база данни MongoDB