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

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

使用限制時,使用MongoDB獲取文檔總數

使用限制時,使用MongoDB獲取文檔總數

catspeake 2019-10-21 11:05:57
我對優化與MongoDB合作的“分頁”解決方案感興趣。我的問題很直接。我通常會限制使用該limit()功能返回的文檔數。這迫使我發出一個沒有該limit()功能的冗余查詢,以便我也可以捕獲查詢中的文檔總數,因此我可以將其傳遞給客戶端,讓他們知道他們將不得不發出額外的請求。檢索其余文檔。有沒有一種方法可以將此壓縮為1個查詢?獲取文檔總數,但同時僅使用limit()?檢索子集。與我正在解決的問題相比,有沒有其他方法可以考慮這個問題?
查看完整描述

3 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

Mongodb 3.4引入了$facet聚合


它在同一組輸入文檔的單個階段中處理多個聚合管道。


使用$facet和$group可以找到的文檔,$limit并可以獲得總數。


您可以在mongodb 3.4中使用以下聚合


db.collection.aggregate([

  { "$facet": {

    "totalData": [

      { "$match": { }},

      { "$skip": 10 },

      { "$limit": 10 }

    ],

    "totalCount": [

      { "$group": {

        "_id": null,

        "count": { "$sum": 1 }

      }}

    ]

  }}

])

即使您可以使用  $countmongodb 3.6中引入的聚合。


您可以在mongodb 3.6中使用以下聚合


db.collection.aggregate([

  { "$facet": {

    "totalData": [

      { "$match": { }},

      { "$skip": 10 },

      { "$limit": 10 }

    ],

    "totalCount": [

      { "$count": "count" }

    ]

  }}

])


查看完整回答
反對 回復 2019-10-21
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

時代變了,我相信你能達到什么OP是通過聚合與要求$sort,$group和$project。對于我的系統,我還需要從users集合中獲取一些用戶信息。希望這也可以回答有關此問題。下面是一個聚合管道。最后三個對象(排序,組和項目)是處理總計數,然后提供分頁功能的對象。


db.posts.aggregate([

  { $match: { public: true },

  { $lookup: {

    from: 'users',

    localField: 'userId',

    foreignField: 'userId',

    as: 'userInfo'

  } },

  { $project: {

    postId: 1,

    title: 1,

    description: 1

    updated: 1,

    userInfo: {

      $let: {

        vars: {

          firstUser: {

            $arrayElemAt: ['$userInfo', 0]

          }

        },

        in: {

          username: '$$firstUser.username'

        }

      }

    }

  } },

  { $sort: { updated: -1 } },

  { $group: {

    _id: null,

    postCount: { $sum: 1 },

    posts: {

      $push: '$$ROOT'

    }

  } },

  { $project: {

    _id: 0,

    postCount: 1,

    posts: {

      $slice: [

        '$posts',

        currentPage ? (currentPage - 1) * RESULTS_PER_PAGE : 0,

        RESULTS_PER_PAGE

      ]

    }

  } }

])


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 1591 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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