我的架构是这样的:
Registration: {
totalDue: Number,
amountPaid: Number,
charges: [
{
amount: Number,
paymentMethod: String,
status: String
}
]
}
我正在构建一个报告工具,以便用户可以查询给定金额的费用。例如,我想以超过30的金额显示所有成功的收费。
我目前的查询是:
db.registrations.aggregate(
{$match: {'charges.status':'succeeded', 'charges.amount': {$gt: 30}}},
{$unwind:'$charges'},
{$match: {'charges.status':'succeeded', 'charges.amount': {$gt: 30}}},
{$project:{'charges':1}}
)
我得到了正确的结果,这是收费列表,但我也是mongodb的新手,所以我不确定是否有更好的方法来做到这一点。似乎有一种更有效的方式,然后使用相同的标准两次使用$ match,一次以正确的费用获得所有注册,然后再次过滤实际费用。
可能有数千个注册,每个注册都有0到几百个费用。
顺便说一句,当我在robomongo上运行查询时,它只显示了50个结果,并且没有其他页面供我滚动,任何想法为什么?我没有使用$ limit。