复杂mongodb查询

复杂mongodb查询,mongodb,Mongodb,我是mongo的新手,我正在尝试做一个简单的查询(至少在sql it simple中是这样),但我无法正确地进行查询。我使用java驱动程序。 我的收藏包含以下文档: {"name":"bb", "action": {"Type":"Buy","amount":78}, "date": "Jan 31, 2013 10:31:20 AM"} 我想知道一个用户:“bb”是否在上个月购买了总额超过1000的动作(我想$sum金额) 我如何在Mongodb中做到这一点 谢谢诸如此类的东西: db

我是mongo的新手,我正在尝试做一个简单的查询(至少在sql it simple中是这样),但我无法正确地进行查询。我使用java驱动程序。
我的收藏包含以下文档:

{"name":"bb",
 "action": {"Type":"Buy","amount":78},
 "date": "Jan 31, 2013 10:31:20 AM"}
我想知道一个用户:“bb”是否在上个月购买了总额超过1000的动作(我想
$sum
金额)
我如何在Mongodb中做到这一点

谢谢诸如此类的东西:

db.col.aggregate([
    {$match: {name: 'bb'}},
    {$unwind: '$action'}, 
    {$group: {_id: '$name', sum_amount: {$sum: '$action.amount'}}},
    {$match: {sum_amount: {$gt: 1000}}}
])
我会成功的。我假设这里唯一的操作类型是
购买
,如果不是这种情况,您可以在
$unwind
之后执行额外的
$match

{$match: {'action.Type': 'Buy'}}

只获取
Buy
类型。

谢谢,我如何为只为最后一次装载所做的操作添加条件?如果将日期存储为日期格式,而不是字符串,则可以对匹配进行范围查询($gte和$lte),限制聚合结果。@user1109846,如Ross所说,如果将日期存储为ISODate()格式(b基于日期)那么你只需要做一个简单的$gte,而不是一个月前的另一个日期