mongo-doc-案例

数据准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
db.menpai.insert({
"num" : 1,
"name" : "大唐官府",
"country":"人",
"sex" : "男",
"player" : 2000,
"score":90,
"skills" : ["为官之道", "无双一击", "神兵鉴赏", "疾风步"],
"description" : "装备耐久度的消耗速度为普通的1/2。"
});

db.menpai.insert({
"num" : 2,
"name" : "方寸山",
"country":"人",
"sex" : "男",
"player" : 1120,
"score":82,
"skills" : ["黄庭经", "磬龙灭法"],
"description" : "对地府弟子的所有伤害增加10%,对鬼魂系敌人的物理、法术伤害加倍。"
});

db.menpai.insert({
"num" : 3,
"name" : "龙宫",
"country":"仙",
"sex" : "男",
"player" : 2120,
"score":92,
"skills" : ["九龙诀"],
"description" : "法术命中率100%。"
});

db.menpai.insert({
"num" : 4,
"name" : "普陀山",
"country":"仙",
"sex" : "女",
"player" : 1200,
"score":84,
"skills" : ["护法金刚","观音咒"],
"description" : "避免对方的五行对自己的克制效果。"
});

db.menpai.insert({
"num" : 5,
"name" : "女魃墓",
"country":"魔",
"sex" : "女",
"player" : 1200,
"score":86,
"skills" : ["天火献誓"],
"description" : "受到持续时间较长的负面持续效果影响时,有一定概率持续回合数减少1"
});

db.menpai.insert({
"num" : 6,
"name" : "盘丝洞",
"country":"魔",
"sex" : "女",
"player" : 1450,
"score":87,
"skills" : ["蛛丝阵法", "迷情大法", "秋波暗送", "天外魔音", "盘丝大法"],
"description" : "不受任何暗器伤害。"
});

db.menpai.insert({
"num" : 7,
"name" : "狮驼岭",
"country":"魔",
"sex" : "男",
"player" : 1550,
"score":82,
"skills" : ["魔兽神功", "生死搏", "训兽诀"],
"description" : "每次训养召唤兽所提升的忠诚度加倍;召唤兽在战斗中死亡不掉忠诚;武器耐久度的消耗速度为普通耐久消耗速度的70%。"
});

db.menpai.insert({
"num" : 8,
"name" : "化生寺",
"country":"人",
"sex" : "男",
"player" : 1360,
"score":83,
"skills" : ["小乘佛法", "金刚伏魔", "诵经"],
"description" : "由于不受女色诱惑,受到女儿村,盘丝洞的封系法术命中率减半。"
});

db.menpai.insert({
"num" : 9,
"name" : "女儿村",
"country":"人",
"sex" : "女",
"player" : 1460,
"score":87,
"skills" : ["倾国倾城", "沉鱼落雁"],
"description" : "使用暗器的伤害效果上升50点,10%的几率使用暗器攻击时,目标中毒。如果有沉鱼落雁技能,则使用暗器为攻击多人。"
});

db.menpai.insert({
"num" : 10,
"name" : "无底洞",
"country":"魔",
"sex" : "女",
"player" : 1467,
"score":87,
"skills" : ["枯骨心法", "阴风绝章"],
"description" : "每回合回复等级/4的气血",
"new":1,
});

db.menpai.insert({
"num" : 11,
"name" : "神木林",
"country":"人",
"sex" : "男",
"player" : 800,
"score":76,
"skills" : ["瞬息万变"],
"description" : "使用法术有2%概率触发重光,额外触发一次法术连击,造成的伤害为40%",
"new":1,
"stage":{"first":10,"second":30,"third":59},
});

查找使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 查找所有男的门派
db.menpai.find({"sex":"男"});

# 查找所有分数大于85的门派
db.menpai.find({"score":{$gt:85}});

# 查找所有分数在80-87之间的门派
db.menpai.find({"score":{$gte:80, $lte:87}});

# 查找所有不是人族的门派
db.menpai.find({"country":{$ne:"人"}});

# 查找所有 score % 10 == 7的门派
db.menpai.find({ "score" : { $mod : [ 10 , 7 ] } });

# 查找所有分数等于85或87的门派
db.menpai.find({ "score" : { $in : [ 85, 87] } });

# 查找所有分数不等于85或87的门派
db.menpai.find({ "score" : { $nin : [ 85, 87] } });

# 查找所有技能数是3个的门派
db.menpai.find({ "skills" : { $size : 3 } });

# 查找所有带new变量的门派
db.menpai.find({ "new" : { $exists : true } });

# 查找所有门派是仙族或人族的
db.menpai.find({ $or: [{"country":"人"}, {"country":"仙"}]});

# 查找所有门派,阶段1等于10的
db.menpai.find({"stage.first":10});

排序使用

1
2
3
4
5
# 对所有门派的分数进行升序排序,且只显示门派名称和分数
db.menpai.find({}, {"name":1, "score":1}).sort({"score":1})

# 对所有门派的分数进行降序排序,且只显示门派名称和分数
db.menpai.find({}, {"name":1, "score":1}).sort({"score":-1})

聚合使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 统计各族门派数量
db.menpai.aggregate({$group:{_id:'$country',count:{$sum:1}}});

# 统计所有门派总数和平均分数
db.menpai.aggregate({$group:{_id:null,门派数:{$sum:1},平均分数: {$avg: '$score'}}});

# 根据门派性别统计门派信息并将门派列出来
db.menpai.aggregate({$group:{_id:'$sex',门派数:{$sum:1},门派名称:{$push:'$name'}}});

# 找出分数大于85的门派
db.menpai.aggregate({$match:{"score":{$gt:85}}});

# 统计出分数大于85的男女门派数量
db.menpai.aggregate([
{$match:{"score":{$gt:85}}},
{$group:{_id:'$sex',总人数:{$sum:1}}}
]);

# 将分数大于85的门派的名称和分数显示出来
db.menpai.aggregate([
{$match:{"score":{$gt:85}}},
{$project:{_id:0,name:1, score:1}}
]);

# 将分数大于85的门派进行升序排序,并且只显示前4条门派的名称和分数
db.menpai.aggregate([
{$match:{"score":{$gt:85}}},
{$project:{_id:0,name:1,score:1}},
{$sort:{'score':1}},
{$limit:4}
]);

# 将分数大于85的门派根据技能进行拆分逐条显示,并且只显示名称、分数和技能
db.menpai.aggregate([
{$match:{"score":{$gt:85}}},
{$unwind:'$skills'},
{$project:{_id:0,name:1,score:1,skills:1}},
]);