按自定义文件的Mongodb分组语句

时间:2018-07-13 12:41:25

标签: mongodb aggregation-framework

我想从mongodb中检索数据,对基于db字段(可能存在或不存在)的自定义字段进行分组和求和,但由于没有数据混淆,我没有期望的结果(请参阅附件) enter image description here。 mongo语句是:

aggregate({

$match: {
    owner: 'W99999',
        creation_date: {
            $gte: 1530748800,
            $lte: 1531292133
        }
    },
$project: {

  isWarm: { 
    $cond: [{
        $not: ["$referral"] }, 1, 0 ]
  },

  isCold: { 
    $cond: [{
        $not: ["$referral"] }, 0, 1 ]
  },

        daysBefore: {
            $subtract: [6, {
                $trunc: {
                    $divide: [{
                        $subtract: ['$creation_date', 1530748800]
                    }, 86400]
                }
            }]
        }
},
$group: {
  _id: {
            isWarm: { $sum: "$isWarm" },
            isCold: { $sum: "$isCold" },
            daysBefore: '$daysBefore'
        }
})

我认为问题在于创建它们的“ isWarm”和“ isCold”条件。预先谢谢你。

更新05/07/2018。

  • 模式(出于安全原因而被废弃):

    { 
      "_id": "1",  
      "creation_date":"1515780901",  
      "referral:  //This field is optional. 
       { 
           some_data: { }
       },  
        more_data: { } 
    } 
    
  • 预期结果:

    { [
        { isCold: 3, isWarm: 2, daysBefore: 0 }, 
        { isCold: 2, isWarm: 5, daysBefore: 1 }, 
        { isCold: 5, isWarm: 0, daysBefore: 2 }, 
        { isCold: 1, isWarm: 2, daysBefore: 3 }, 
        { isCold: 1, isWarm: 1, daysBefore: 4 }, 
        { isCold: 1, isWarm: 0, daysBefore: 5 },    
        { isCold: 0, isWarm: 0, daysBefore: 6 }   
    ] }
    

即使没有要计数的文档(例如结果的最后一行),我也希望拥有该对象。

已解决:我需要使用真实数据进行测试。

  • 我想我有一个解决方案:

    [{ $project: {  
    _id: 0,  
    daysBefore: {           
        $subtract: [6, {                
            $trunc: {                   
                $divide: [{                     
                    $subtract: ['$creation_date', 1530748800] }, 86400]
            }
        }]
    },
    isWarm: {$cond: [{ $gte: ['$referral', null]}, 1, 0]},  
    isCold: {$cond: [{ $gte: ['$referral', null]}, 0, 1]}} }, 
    
    { 
        $group: 
            { 
                _id: { creation_date: '$daysBefore' },
                isWarm: { $sum: '$isWarm' },
                isCold: { $sum: '$isCold' }
            } 
    }]
    

0 个答案:

没有答案