MongoDB的find函数如何使用

MongoDB的find函数如何使用


1、Why?为什么使用find()函数

我在mongo中存储的数据是爬网页的json数据,结构较为复杂,json内部嵌套的很厉害,光靠眼睛来看找数据好像有点困难。pycharm上的插件提供了搜查功能,可是我发现,但仍然还是要自己用json的格式提供要搜的关键词和值。经过搜集也可以发现其实这个功能只是对find()函数的一个封装。
所以,我们要用find()

2、示例数据

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
示例数据json:
{
"_id": {
"$oid": "5adcae9b3fa8b06fdbe7184e"
},
"json": {
"sjkList": [{
"jxbmc": "面向对象程序设计课程设计-0022",
"userModel": {
"roleCount": 0,
"status": 0,
"monitor": false,
"roleKeys": "",
"usable": false,
"roleValues": ""
},
"jgpxzd": "1",
"totalResult": "0",
"zhxs": "2",
"qsz": "21",
"listnav": "false",
"jxb_id": "62DAED714DEEA4ECE0530C0114AC99EB",
"xqdm": "0",
"kcmc": "面向对象程序设计课程设计",
"localeKey": "zh_CN",
"sfsjk": "1",
"xm": "孙斌",
"xqh_id": "1",
"rsdzjs": 0,
"zzz": "22",
"rangeable": true,
"jxbzh": "117171;117172",
"pageable": true,
"queryModel": {
"totalPage": 0,
"currentPage": 1,
"totalCount": 0,
"entityOrField": false,
"pageNo": 0,
"offset": 0,
"currentResult": 0,
"pageSize": 15,
"limit": 15,
"totalResult": 0,
"showCount": 10
}
}, {
"jxbmc": "自然地理与地质学实习-0003",
"userModel": {
"roleCount": 0,
"status": 0,
"monitor": false,
"roleKeys": "",
"usable": false,
"roleValues": ""
},
"jgpxzd": "1",
"totalResult": "0",
"zhxs": "2",
"qsz": "22",
"listnav": "false",
"jxb_id": "5F7A59A6AB1521FDE0530B0114ACF30A",
"xqdm": "0",
"kcmc": "自然地理与地质学实习",
"localeKey": "zh_CN",
"sfsjk": "1",
"xm": "孙斌",
"xqh_id": "1",
"rsdzjs": 0,
"zzz": "23",
"rangeable": true,
"jxbzh": "117171;117172",
"pageable": true,
"queryModel": {
"totalPage": 0,
"currentPage": 1,
"totalCount": 0,
"entityOrField": false,
"pageNo": 0,
"offset": 0,
"currentResult": 0,
"pageSize": 15,
"limit": 15,
"totalResult": 0,
"showCount": 10
}
}]
}
}

3、find()怎么用

find()函数的基本用法很简单

1
2
# -*- coding:utf-8 -*-
MongoClient['你的库名']['你的表名'].find({'key':'要搜的value'})

但是对应实例数据,复杂json嵌套数据下这个简单的搜索方法好像没用,找了很久网页,基本都是浅尝辄止,或者介绍的和我关心的不在一个频道。

但是后来还是找到了正确的方法:
可以看到第二个关键字’json’中的嵌套了数组,数组的组成单位是json串
为了获得”jxb_id”: “5F7A59A6AB1521FDE0530B0114ACF30A”这个关键词对应的数据,我们可以使用如下方法

1
2
# -*- coding:utf-8 -*-
MongoClient['你的库名']['你的表名'].find({"json.sjkList.jxb_id" : "5F7A59A6AB1521FDE0530B0114ACF30A"})

4、如何理解

想要理解为什么会这样来用,其实看一下mongodb的一些基本的命令行操作,会有一点启发,基本都会有’.’这个操作符号,这个操作符像是在往对象的内部不断地纵深。

我们把每个关键字对应的值理解为一个对象,为了进入对象内部,用’.’来操作也就很理所当然了。