亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 MongoDB 或 Mongoose 在一個查詢中對兩個集合進行分組

如何使用 MongoDB 或 Mongoose 在一個查詢中對兩個集合進行分組

人到中年有點甜 2023-06-09 15:18:04
我有這樣的頁面。數據來自我的 MongoDB 服務器。首先,我創建用戶集合并放置這些用戶數據。但我添加了Counter 集合,因為我想顯示他們的View Count。每個用戶有多個頁面,View Count數據是Counter數據的總和。用戶集合看起來像這樣,我只需要登錄名、id(唯一)數據。用戶收藏{    "_id": {        "$oid": "5f7e92b88dc8f64cb4e6c2c0"    },    "login": "mojombo",    "id": 1,    "avatar_url": "https://avatars0.githubusercontent.com/u/1?v=4",    "url": "https://api.github.com/users/mojombo",    "html_url": "https://github.com/mojombo",    "type": "User",    "site_admin": "false",    "name": "Tom Preston-Werner",    "company": null,    "blog": "http://tom.preston-werner.com",    "location": "San Francisco",    "email": "[email protected]",    "hireable": null,    "bio": null,    "created_at": {        "$date": "2007-10-20T05:24:19.000Z"    },    "updated_at": {        "$date": "2020-09-22T15:50:44.000Z"    },    "registerDate": {        "$date": "2020-10-08T04:16:56.459Z"    },    "__v": 0}專柜收款{    "_id": {        "$oid": "5f8e5bde9054ba2477dc2c57"    },    "repoName": "ale",    "repoNumber": 171780764,    "userName": "technicalpickles",    "userNumber": 159,    "viewDate": "2020-10-20",    "count": 1}在 Counters 集合中,我只需要userName,count字段來計算計數器數據。所以我嘗試循環和聚合方法,但問題是用戶數據太多,所以我必須向服務器發送太多查詢。(如果我有 10000 個用戶數據,我必須發送 10000 個請求)所以,我不能使用 for 循環方法。
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

  • $lookup使用管道階段的計數器集合,讓傳遞 2 個字段id, login以匹配計數器集合

  • $match兩個字段條件

  • $addFieldscount從計數器數組中求和計數字段,使用迭代$reduce循環和$add求和計數字段的值

  • $skip用于分頁

  • $limit超過你的文件限制

let page = 1; // start pagination from first

let limit = 1000;

let skip = (page - 1) * limit;

let users = await User.aggregate([

  {

    $lookup: {

      from: "counters",

      let: {

        id: "$id",

        login: "$login"

      },

      pipeline: [

        {

          $match: {

            $expr: {

              $eq: ["$userName", "$$login"],

              $eq: ["$userNumber", "$$id"]

            }

          }

        }

      ],

      as: "count"

    }

  },

  {

    $addFields: {

      count: {

        $reduce: {

          input: "$count",

          initialValue: 0,

          in: { $add: ["$$value", "$$this.count"] }

        }

      }

    }

  },

  { $skip: skip },

  { $limit: limit }

])

操場


查看完整回答
反對 回復 2023-06-09
  • 1 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號