按结果数百分比的Mongodb聚合限制

时间:2018-09-18 10:56:38

标签: mongodb aggregation-framework limit

我有以下订单集合:

Orders:
{
  //some typical order fields
  cancelationMoment: {
    type: Date
  },
  
  consumer: {
    type: Schema.Types.ObjectId,
    required: 'consumer id required'
  }
  
}

我想获得订单数量更多(前10%)的消费者。

我当前的实现是:

db.orders.aggregate([
	{$match:{ cancelationMoment: { $exists: true } }},
        {"$group" : {_id:"$consumer", ordersCanceled:{$sum:1}}
        },
        
        {$sort:{"ordersCanceled":-1}},
       
        { $limit:  2}
        
        ]);

但是我不仅要获得前2名,还要获得前10%。这可能吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以保存一个具有集合范围的变量,然后根据需要进行操作。

var total = db.orders.find({ }).count();

db.orders.aggregate([  
    { 
        $limit: total * 0.1
    }
]);

更新

很好地使用阶段“ $ count”会影响结果的投影,但是您可以直接将先前的代码用于聚合阶段。

db.orders.aggregate([  
    { 
        $limit: db.orders.find({ }).count() * 0.1
    }
]);