大佬教程收集整理的这篇文章主要介绍了node.js – 我可以在MongoDB的聚合查询中申请forEach吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的过程是
var eachMemberInfo = []; var members = db.collection('member').find({ createdDate: currentDate,country: 'BD'}).toArray(); members.forEach(function(doC) { var result = db.collection('member').aggregate([ { $match: { memberType: doc.memberType,country : doc.country } },{ $group: { _id: {memberType:"$memberType",country:"$country"},memberCount: { $sum: {$cond:[{$gt: ["$numberOfInvitees",0]},1,0]} },lessCount: { $sum: {$cond:[{$and:[{$lt:["$numberOfInvitees",doc.numberOfInvitees]},{$gt: ["$numberOfInvitees",0]}]},sameCount: { $sum: {$cond:[{$eq: ["$numberOfInvitees",0]} } } } ]).toArray(); eachMemberInfo.push({memberId:doc.memberId,memberCount: result[0].memberCount,lessCount: result[0].lessCount}); });
我的问题是如何使用单个聚合查询来执行此操作?
任何人都可以帮助我:)
例如:
会员集合如:
[{ "_id" : ObjectId("57905b2ca644ec06142a8c06"),"memberID" : 80,"memberType" : "N","numberOfInvitees" : 2,"createdDate" : ISODate("2016-07-21T00:00:00.000Z"),"country" : "BD" },{ "_id" : ObjectId("57905b2ca644ec06142a8c09"),"memberID" : 81,"numberOfInvitees" : 3,"country" : "BD" } { "_id" : ObjectId("57905b2ca644ec06142a8fgh"),"memberID" : 82,"numberOfInvitees" : 4,"country" : "BD" } { "_id" : ObjectId("57905b2ca644ec06142a8cfgd"),"memberID" : 83,"numberOfInvitees" : 1,"memberID" : 84,"country" : "BD" } .............. ]
每个会员信息中的预期结果如:
[ { memberID : 80,memberCount:5,lessCount: 1,sameCount:2 },{ memberID : 81,lessCount: 3,sameCount:1 },{ memberID : 82,lessCount: 4,{ memberID : 83,lessCount: 0,{ memberID : 84,sameCount:2 } ]
因此,您在上面尝试实现的内容可以简单地重写为以下管道,而无需首先创建文档数组:
var collection = db.collection('member'),pipeline = [ { "$match": { createdDate: currentDate,country: 'BD' } },{ "$group": { "_id": { "memberType": "$memberType","country": "$country" },"memberCount": { "$sum": { "$cond":[ { "$gt": ["$numberOfInvitees",0] },0 ] } },"sameCount": { "$sum": 1 } } } ]; collection.aggregate(pipeline,function(err,result){ if (err) throw err; console.log(result); });
跟进您的问题的更改,运行以下聚合管道将为您提供所需的结果:
var collection = db.collection('member'),pipeline = [ { "$match": { createdDate: currentDate,{ "$group": { "_id": { "memberType": "$memberType","country": "$country" },"invitees":{ "$push": { "memberID": "$memberID","count": "$numberOfInvitees" } },"inviteesList": { "$push": "$numberOfInvitees" },"memberCount": { "$sum": 1 } } },{ "$unwind": "$invitees" },{ "$unwind": "$inviteesList" },{ "$group": { "_id": "$invitees.memberID","sameInviteesCount": { "$sum": { "$cond": [ { "$eq": ["$inviteesList","$invitees.count"] },0 ] } },"lessInviteesCount": { "$sum": { "$cond":[ { "$lt": ["$inviteesList","memberCount": { "$first": "$memberCount" } } } ]; collection.aggregate(pipeline,result){ if (err) throw err; console.log(result); });
以上是大佬教程为你收集整理的node.js – 我可以在MongoDB的聚合查询中申请forEach吗?全部内容,希望文章能够帮你解决node.js – 我可以在MongoDB的聚合查询中申请forEach吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。