sql >> データベース >  >> NoSQL >> MongoDB

MongoDb Aggregation:array-1とarray-2が指定されている場合、別のarray-2に基づいてarray-1をグループ化するにはどうすればよいですか?

    「パズル」の投稿を正しく理解している場合(投稿のタイトルと編集 さまざまなユースケースです)、単一の$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. MongoDBの命名規則は何ですか?

    2. クラスターフェイルオーバー

    3. MongoDBは明確な値をカウントしますか?

    4. redisデータベースを変更するにはどうすればよいですか?