所以我有一个大型集合,我想计算与其他过滤器具有相同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)