您好我想计算一个文档的字段,'sendTime'字段在文档数组中,条件是
$and:[sendTime:{$gte:startTime},sendTime:{$lte:endTime}]
我的文件看起来像这样
{
_id:ObjectId("5663c7d23d2a580bac21091b"),
message:[
{
msg:"1",
sendTime:ISODate("2015-12-08T09:34:53.128Z")
},
{
msg:"2",
sendTime:ISODate("2015-12-09T09:34:53.128Z")
}
....
]
},
{
_id:ObjectId("5663c7d23d2a580bac210912"),
message:[
{
msg:"aaa",
sendTime:ISODate("2015-12-06T09:34:53.128Z")
},
{
msg:"bbb",
sendTime:ISODate("2015-12-08T09:34:53.128Z")
}
....
]
}
我从其他问题中学习一种计算字段的方法。
db.chat.find().map(function(room){
room.message.map(function(msg){
if(msg.sendTime >= startTime&&msg.sendTime<=endTime)
queryTotalMsg++;
});
});
我尝试使用聚合来做同样的事情
db.chat.aggregate([
$project:{
message:"$message.sendTime"
}
]);
但我不知道如何计算带条件的sendTime
我不知道聚合可以用于这个问题。
感谢您的回答。
答案 0 :(得分:0)
将您的条件设置为$ match并依赖于您是否要将所有数组文档统计为一个整体,也可以尝试$ unwind,例如..
db.chat.aggregate({$unwind: "$message" }, {$match: {condition}}, {$group: {_id: 1, count: { $sum: 1}}});
匹配参考:https://docs.mongodb.org/v3.0/reference/operator/aggregation/match/