éæ±ï¼
è¦å¯¹ topics é®é¢è¡¨æ ¹æ® teach_idï¼æå¸IDï¼ï¼tips._idï¼é®é¢æ ç¾IDï¼ åæ®µè¿è¡åç»ç»è®¡æå¸çç颿 åµçææ¥è¡¨ï¼æä»¥å¾æ ¹æ® æå¸IDï¼æ ç¾ID å ³èæ¥è¯¢åº æå¸ä¿¡æ¯ï¼æ ç¾ä¿¡æ¯ ç¨ä½æ¥è¡¨å±ç¤ºã
æ¬æåºäº MongoDB V3.2 èåæ¥è¯¢è¯æ³ï¼V3.6 å¯ä½¿ç¨æ´å¤çç¹æ§å®ç°
topics è¡¨æ°æ®ç»æï¼
{
"_id" : "ffffea46-ab7d-4c19-afa4-fe37709d5300",
"evaluation_type" : 3,
"type" : 3,
"content" : "ä¸è¬çº³ç¨äººæä¹ç»è½¬ææ¬",
"tips" : [
{
"_id" : 1000,
"tip_name" : "ä¼è®¡åºç¡"
}
],
"update_at" : NumberLong("1469801351305"),
"author_id" : 10334093,
"timestamp" : NumberLong("1469714932097"),
"race_time" : NumberLong("1469714947334"),
"teach_id" : 10122995,
"last_reply_content" : "è¿å°±è¦çä½ ç¨çæ¯ä»ä¹ææ¬è®¡ä»·æ¹æ³ã",
"last_reply_at" : NumberLong("1469715279859"),
"end_type" : 2
}
仿°æ®ç»æä¸å¯ä»¥ç¥éç¬¬ä¸æ¥æä½æ¯ï¼
æ ¹æ® teach_idï¼tips._id åæ®µè¿è¡åç»ï¼
å¯å¾ groupï¼åç»ï¼ è¯å¥ï¼
$group:{
_id:{"teacherId":"$teach_id","tipId":"$tips._id"},
evaluationTypes:{
$push:"$evaluation_type"
},
sum: {$sum: 1}
}
$push宿¹ææ¡£(https://docs.mongodb.com/manual/reference/operator/update/push/index.html)
$pushï¼å¯ä»¥åç»ä¹åæ evaluation_type åæ®µå¼ èµç» evaluationTypes å å ¥å°åç»ä¹åçè¿åå¼ä¸
$sum宿¹ææ¡£(https://docs.mongodb.com/manual/reference/operator/aggregation/sum/index.html)
$sumï¼å¯å¾å° teach_idï¼tips._id é½ç¸åçè®°å½æ¡æ°
使ç¨èæ¬ï¼
db.getCollection("topics").aggregate([** {
$match:{
"race_time" : {"$gte":1522512000000,"$lte":1525103999000},
"type":3
}
},
{
$group:{
_id:{"teacherId":"$teach_id","tipId":"$tips._id"},
evaluationTypes:{
$push:"$evaluation_type"
},
sum: {$sum: 1}
}
}
])
æ¥è¯¢ç»æï¼**
ä»ç»æå¯ä»¥çåº æå¸ï¼10706280 å¨è¿ä¸ªæ ç¾ï¼1002 ä¸ä¸å ±æ¢çäº 4 æ¡é®é¢ï¼ä»¥åé®é¢ç evaluationTypesï¼è¯ä»·ç±»åï¼
ä¸ä¸ªåç»ä½ä¸ºæ¥è¡¨ç䏿¡è®°å½ï¼æä»¥æä»¬å¾è®¡ç®æ¥è¡¨çæ»è®°å½æ°ï¼æ»è¡æ°ï¼totalï¼æä»¥å对å好ç»çè®°å½è¿è¡æ æ¡ä»¶åç»ï¼_id: nullï¼**
使ç¨èæ¬ï¼**
db.getCollection("topics").aggregate([
{
$match:{
"race_time" : {"$gte":1525103910000,"$lte":1525103999000},
"type":3
}
},
{
$group:{
_id:{"teacherId":"$teach_id","tipId":"$tips._id"},
evaluationTypes:{
$push:"$evaluation_type"
},
sum: {$sum: 1}
}
},
{
$group:{
_id: null,
list:{
$push:"$$ROOT"
},
total: {$sum: 1}
}
}
])
$$ROOT æå®çæ¯åç»åçæææ°æ®ï¼æä»¥ list ä¼æç¬¬ä¸æ¬¡åç»å¾å°çæ°æ®é½å¸¦ä¸
total æ¯ç¬¬ä¸æ¬¡åç»ä¹åçè®°å½æ°ï¼å³ä¸å ±åäºå¤å°ç»ï¼ä¹åç¨ä½åé¡µæ»æ°
æ¥è¯¢ç»æï¼
è¿éç group 使ç¨å¯åèï¼MongoDB ä¹ aggregate $group å·§å¦è¿ç¨
æå¸ID ä»¥å æ ç¾ID çä¿¡æ¯å å«å¨ list éåéï¼æä»¥éè¦å¯¹ list è¿è¡æå¹³åï¼$unwindï¼æä½ï¼å¯åèï¼MongoDB èååµå ¥çæ°ç»ï¼æå¹³åæ°æ®+管éï¼
使ç¨èæ¬ï¼**
db.getCollection("topics").aggregate([
{
$match:{
"race_time" : {"$gte":1522512000000,"$lte":1525103999000},
"type":3
}
},
{
$group:{
_id:{"teacherId":"$teach_id","tipId":"$tips._id"},
evaluationTypes:{
$push:"$evaluation_type"
},
sum: {$sum: 1}
}
},
{
$group:{
_id: null,
list:{
$push:"$$ROOT"
},
total: {$sum: 1}
}
},
{
$unwind:"$list"
},
{
$sort: {"list.sum": -1}
},
{
$skip: 0
},
{
$limit: 100
}
])
æ¥è¯¢ç»æï¼**
æå¹³å list éåæ°æ®ä¹åï¼å¯æ ¹æ® æå¸IDï¼æ ç¾ID å ³èæ¥è¯¢ï¼$lookupï¼åºæå¸ä¿¡æ¯ï¼æ ç¾ä¿¡æ¯
$lookup:
{
from:"users",
localField:"list._id.teacherId",
foreignField: "_id",
as: "users"
}
$lookupï¼å®æ¹ææ¡£--https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/index.htmlï¼
3.2çæ¬ åªè½æ ¹æ® localFieldï¼foreignField åæ¡ä»¶å ³èï¼
3.6çæ¬ä¸ å ³èæ¥è¯¢å¼å ¥ pipeline ç®¡éæ¯ææ´å¤æ´ä¸°å¯çæ¥è¯¢ï¼å¯¹åºæ¬æä¼ææ´å¥½çè§£å³æ¹æ¡ãå ·ä½ä½¿ç¨å¯ä»¥æ¥ç宿¹ææ¡£
ä¹å便æ¯å¯¹æ°æ®ç夿¬¡å ³èæ¥è¯¢ï¼ä»¥åæå¹³åæä½ï¼ä¸é¢è´´ä¸
宿´æ¥è¯¢èæ¬ï¼
db.getCollection("topics").aggregate([** {
$match:{
"race_time" : {"$gte":1522512000000,"$lte":1525103999000},
"type":3
}
},
{
$group:{
_id:{"teacherId":"$teach_id","tipId":"$tips._id"},
evaluationTypes:{
$push:"$evaluation_type"
},
sum: {$sum: 1}
}
},
{
$group:{
_id: null,
list:{
$push:"$$ROOT"
},
total: {$sum: 1}
}
},
{
$unwind:"$list"
},
{
$sort: {"list.sum": -1}
},
{
$skip: 0
},
{
$limit: 100
},
{
$lookup:
{
from:"users",
localField:"list._id.teacherId",
foreignField: "_id",
as: "users"
}
},
{
$lookup:
{
from:"tip_content",
localField:"list._id.tipId",
foreignField: "_id",
as: "childTip"
}
},
{
$lookup:
{
from:"tip_content",
localField:"childTip.parent_tip_id",
foreignField: "_id",
as: "parentTip"
}
},
{
$unwind:"$users"
},
{
$unwind:"$childTip"
},
{
$unwind:"$parentTip"
},
{
$project:{
"teacherId":"$list._id.teacherId",
"teacherName":"$users.real_name_from_nc",
"tuid":"$users.tuid",
"mobile":"$users.mobile",
"tipId":"$childTip._id",
"tipName":"$childTip.tip_name",
"parentTipId":"$parentTip._id",
"parentTipName":"$parentTip.tip_name",
"sum":"$list.sum",
"total":"$total",
"evaluationTypes":"$list.evaluationTypes",
"_id":0
}
}
])
æ¥è¯¢ç»æï¼**
作者:molashaonian