2016-10-19 40 views
1

進出口使用節點項目中貓鼬,我有以下查詢:蒙戈:限制返回的記錄增量計數片上

var query = Model.aggregate(
     { $match: { id: id } }, 
     { $sort: { created: -1 } }, 
     { 
      $project: { 
       name: true, 
       number: true, 
       created: true, 
       status: true, 
       time: true, 
       array_data: { $slice: ['$array_data', 5] } 
      } 
     } 
    ) 

我以爲片會根據多少記錄限制我的整個記錄​​5在array_data字段中,但它僅限制返回的array_data元素的數量。

我所希望做的是:

比方說在我的模型記錄1 array_data 10個元素,記錄2在我的模型有array_data 15個元素。

我希望能夠切片或使用一些其他功能,所以當我查詢我的模型的'limit'爲20時,它返回第一個集合,其中包含array_data中的所有10個元素以及第二個集合和第一個集合array_data中的10條記錄等於20的「限制」。

這對Mongo來說可能嗎?

回答

1

使用unwind解構的文件,然後限制它,並再次將它們分組

var query = Model.aggregate(
     { $match: { id: id } }, 
     { $sort: { created: -1 } }, 
     { $unwind: '$array_data' }, 
     { $limit: 20 }, 
     { 
      $group: { 
      _id: { 
       name:'$name', 
       number: '$number', 
       created: '$created', 
       status: '$status', 
       time: '$time' 
      }, 
      array_data: { 
       $push: '$array_data' 
      } 
      } 
     }, 
     { 
      $project: { 
       name: '$_id.name', 
       number: '$_id.number', 
       created: '$_id.created', 
       status: '$_id.status', 
       time: '$_id.time', 
       array_data: 1, 
       _id: 0 
      } 
     } 
    ) 
+0

有趣的方法,生病了去嘗試這個,謝謝。 –

+0

任何這個效率的想法? –