无法在mongodb中获得准确的聚合计数

时间:2017-06-23 17:26:04

标签: mongodb go aggregation-framework mgo

所以我有一个大型集合,我想计算与其他过滤器具有相同company_id的文档数量(expired_at大于new Date()或{{1文档中不存在)。基本上要计算属于公司的活动作业数量。

这是我到目前为止所得到的,但计数结果比它应该的大。谁能告诉我查询有什么问题?

也许有重复?如果是这种情况,如何将重复组合为一个或在计数时避免它们?感谢。

expired_at

实际代码:

db.jobs.aggregate([
{
    $match: {
        $and: [
            {company_id: ObjectId('524a09a44c9ff23382000037')},
            { $or: [ { expired_at: { $gt: new Date() } }, { expired_at: { $exists: false } } ]}
        ] 
    }
},
{
    $group: {
        _id: 1,   
        count: {$sum: 1}
    }
}
])

这是架构的样子:

query := bson.M{
  "$and": []bson.M{
    bson.M{"company_id": id},
    bson.M{
      "$or": []bson.M{
        bson.M{"expired_at": bson.M{"$exists": false}},
        bson.M{"expired_at": bson.M{"$gt": bson.Now()}},
      },
    },
  },
}

counter := []bson.M{
  bson.M{"$match": query},
  bson.M{"$group": bson.M{"_id": 1, "count": bson.M{"$sum": 1}}},
}

var result struct {
  Count int `bson:"count"`
}
err := s.DB(session).C("jobs").Pipe(counter).One(&result)

0 个答案:

没有答案