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

MongoDb Aggregation:Làm cách nào để tôi có thể nhóm một mảng-1 dựa trên một mảng-2 khác khi cho mảng-1 và mảng-2?

Nếu tôi hiểu đúng về bài đăng "câu đố" (Tiêu đề bài đăng và CHỈNH SỬA là các trường hợp sử dụng khác nhau), chúng ta có thể nhận được kết quả mong muốn chỉ với một $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. Phân trang nhanh với MongoDB

  2. Sao chép tài liệu trong MongoDB bằng cách sử dụng _id mới

  3. Mongo thứ tự theo độ dài của mảng

  4. Chỉ định nhiều tiêu chí cho các phần tử mảng

  5. làm cách nào để kết nối với máy chủ mongo từ xa từ thiết bị đầu cuối Mac OS