Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB子文档合计大于3且子文档值之和大于15000时如何计数_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB子文档合计大于3且子文档值之和大于15000时如何计数

MongoDB子文档合计大于3且子文档值之和大于15000时如何计数,mongodb,mongodb-query,Mongodb,Mongodb Query,样本数据: { "_id" : "5e7b0e1c4669fe48ea07b63a", "isActive" : false, "balance" : -1503.89, "age" : 27, "eyeColor" : "green", "name" : "Allison Alvarez", "gender" : "female", "company" : "RONE

样本数据:

{
        "_id" : "5e7b0e1c4669fe48ea07b63a",
        "isActive" : false,
        "balance" : -1503.89,
        "age" : 27,
        "eyeColor" : "green",
        "name" : "Allison Alvarez",
        "gender" : "female",
        "company" : "RONELON",
        "email" : "allisonalvarez@ronelon.com",
        "phone" : "+1 (963) 559-2276",
        "address" : "583 Sumpter Street, Stewartville, West Virginia, 110",
        "registered" : "2016-10-19T11:45:39 -01:00",
        "outstandingloans" : [
                {
                        "id" : 0,
                        "balance" : -710.65
                },
                {
                        "id" : 1,
                        "balance" : -2979.51
                },
                {
                        "id" : 2,
                        "balance" : -2520.79
                },
                {
                        "id" : 3,
                        "balance" : -3488.78
                }
        ]
}
我试图找出有超过3笔未偿还贷款,总余额低于-15000的男性人数

到目前为止,我的工作是:

db.defaulters.aggregate([
    {$match: { "gender" : "male"}},
    {$project: {_id: "$name", loansGrt3: {$gte: [{$size: '$outstandingloans'}, 3]} }}
]);


这给了我我一直在寻找的答案,以防它对任何人都有帮助。。不确定它是否完全正确,但它给了我正确的结果

db.defaulters.aggregate( [
    {$match: { gender : "male"}},
    { $unwind: "$outstandingloans" },
    { $group: {
        _id: '$_id', 
        sum: { $sum: '$outstandingloans.balance' },
        count: { $sum: 1 }
    } },
    {$match: { sum : {$lt: -15000}, count: {$gte: 3}}},
    {$group: {_id: "$gender", Total: { $sum: 1 }}}
] );

这给了我我一直在寻找的答案,以防它对任何人都有帮助。。不确定它是否完全正确,但它给了我正确的结果

db.defaulters.aggregate( [
    {$match: { gender : "male"}},
    { $unwind: "$outstandingloans" },
    { $group: {
        _id: '$_id', 
        sum: { $sum: '$outstandingloans.balance' },
        count: { $sum: 1 }
    } },
    {$match: { sum : {$lt: -15000}, count: {$gte: 3}}},
    {$group: {_id: "$gender", Total: { $sum: 1 }}}
] );

您可以使用聚合
$reduce
数组运算符对
“未偿贷款.余额”
进行求和。然后在
$match
阶段中检查
未偿还贷款
数组大小和余额总和。@prasad_uu是正确的$reduce最适合你的情况。我在reduce中遇到异常错误,但可能是由于我使用MongoDB 3.0造成的。您可以使用聚合
$reduce
数组运算符对
的“未偿贷款.余额”
求和。然后在
$match
阶段中检查
未偿还贷款
数组大小和余额总和。@prasad_uu是正确的$reduce最适合你的情况。我在reduce中遇到异常错误,但可能是因为我使用的是MongoDB 3.0。我在这一个中遇到了“异常:无效运算符“$sum”。您使用的是哪个版本的MongoDB?在3.2版以后的版本中可用…我得到了一个“异常:无效运算符'$sum')。您使用的是哪个版本的MongoDB?在3.2版及以上版本中提供。。。
db.defaulters.aggregate( [
    {$match: { gender : "male"}},
    { $unwind: "$outstandingloans" },
    { $group: {
        _id: '$_id', 
        sum: { $sum: '$outstandingloans.balance' },
        count: { $sum: 1 }
    } },
    {$match: { sum : {$lt: -15000}, count: {$gte: 3}}},
    {$group: {_id: "$gender", Total: { $sum: 1 }}}
] );