为什么聚合集只返回100个结果?

时间:2015-02-24 14:47:48

标签: mongodb

我目前正在学习mongodb,并尝试使用聚合查询查询测量结果(我知道查询不是最有意义的,但它是简化版本)。

但不知怎的,查询总是返回太少的结果。

db.measurements.aggregate([
    {
        $match: {
            measuretime: {
                $gte: ISODate('2014-05-25'),
                $lt: ISODate('2014-05-26')
            },
            parameter_id: new ObjectId('54eb38fc70703cd29a8e9ae9')
        }
    },
    {
        $group: {
            _id: { parameter_id: '$parameter_id' },
            values: { $addToSet: '$value' }
        }
    }
]);

结果如下:

[
   {
      "_id":{
         "parameter_id":"54eb38fc70703cd29a8e9ae9"
      },
      "values":[
         10.15,
         10.88,
         10.57,
         10.13,
         10.72,
         10.98,
         10.84,
         10.17,
         10.36,
         10.03,
         10.14,
         10.62,
         10.46,
         10.01,
         10.18,
         10.64,
         10.12,
         10.69,
         10.33,
         10.51,
         10.26,
         10.21,
         10.45,
         10.22,
         10.43,
         10.55,
         10.41,
         10.27,
         10.25,
         10.5,
         10.06,
         10.3,
         10.39,
         10.8,
         10.23,
         10.44,
         10.99,
         10.94,
         11,
         10.19,
         10,
         10.71,
         10.85,
         10.02,
         10.59,
         10.79,
         10.07,
         10.77,
         10.74,
         10.96,
         10.31,
         10.76,
         10.1,
         10.32,
         10.65,
         10.58,
         10.49,
         10.47,
         10.48,
         10.24,
         10.52,
         10.61,
         10.83,
         10.73,
         10.28,
         10.56,
         10.11,
         10.7,
         10.97,
         10.82,
         10.91,
         10.66,
         10.93,
         10.2,
         10.9,
         10.89,
         10.4,
         10.05,
         10.95,
         10.16,
         10.78,
         10.67,
         10.08,
         10.68,
         10.81,
         10.04,
         10.09,
         10.54,
         10.87,
         10.92,
         10.63,
         10.75,
         10.35,
         10.86,
         10.6,
         10.37,
         10.53,
         10.29,
         10.38,
         10.42,
         10.34
      ]
   }
]

除了结果中只有100个值之外,这很好,但是在使用count进行检查时,它表明应该有更多(也有100个看起来不像任意数字)。

db.measurements.count({
    measuretime: {
        $gte: ISODate('2014-05-25'),
        $lt: ISODate('2014-05-26')
    },
    parameter_id: ObjectId('54eb38fc70703cd29a8e9ae9')
});

返回:17286

那么有一些配置可以获得超过100个结果吗?或者查询是错误的?

1 个答案:

答案 0 :(得分:3)

$addToSet运算符会删除重复项。您measurements中的原始文档似乎具有value字段的重复值,使用$addToSet插入时会丢弃这些值。您应该使用$push运算符尝试查询。有关$push运算符的详细信息,请查看文档中的this page