我目前正在学习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个结果吗?或者查询是错误的?
答案 0 :(得分:3)
$addToSet
运算符会删除重复项。您measurements
中的原始文档似乎具有value
字段的重复值,使用$addToSet
插入时会丢弃这些值。您应该使用$push
运算符尝试查询。有关$push
运算符的详细信息,请查看文档中的this page。