5.MongoDB基本操作语句 1 #MongoDB中有三元素:数据库,集合,⽂档,其中“集合”就是对应关系数据库中的“表”,“⽂档”对应“⾏”。
2
3 #创建数据库testdb数据库,使⽤以下语句
4 mongos> use testdb;
5 #查询数据库,要显⽰数据库必须插⼊⾄少⼀条⽂档
6 mongos> show dbs;
7 #插⼊数据⽂档
8 mongos> db.tablename.insert({"name":"antian"});
9 #数据库⽣成了
10 mongos> show dbs;
11 testdb 0.078GB
12
13 #删除数据库
14 #查询数据库
15 mongos> show dbs;
16 testdb 0.078GB
17 #进⼊数据库
18 mongos> use testdb;
19 #删除数据库
20 mongos> db.dropDatabase();
21 { "dropped" : "testdb", "ok" : 1 }
22 #查询数据库
23 mongos> show dbs;
24
25 #MongoDB数据类型
26 MongoDB⽀持许多数据类型的列表下⾯给出:
27 String : 这是最常⽤的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。
28 Integer : 这种类型是⽤来存储⼀个数值。整数可以是32位或64位,这取决于您的服务器。
29 Boolean : 此类型⽤于存储⼀个布尔值 (true/ false) 。
30 Double : 这种类型是⽤来存储浮点值。
31 Min/ Max keys : 这种类型被⽤来对BSON元素的最低和最⾼值⽐较。
32 Arrays : 使⽤此类型的数组或列表或多个值存储到⼀个键。
33 Timestamp : 时间戳。这可以⽅便记录时的⽂件已被修改或添加。drop table if exists admin
34 Object : 此数据类型⽤于嵌⼊式的⽂件。
35 Null : 这种类型是⽤来存储⼀个Null值。
36 Symbol : 此数据类型⽤于字符串相同,但它通常是保留给特定符号类型的语⾔使⽤。
37 Date : 此数据类型⽤于存储当前⽇期或时间的UNIX时间格式。可以指定⾃⼰的⽇期和时间,⽇期和年,⽉,⽇到创建对象。
38 Object ID : 此数据类型⽤于存储⽂档的ID。
39 Binary data : 此数据类型⽤于存储⼆进制数据。
40 Code : 此数据类型⽤于存储到⽂档中的JavaScript代码。
41 Regular expression : 此数据类型⽤于存储正则表
42
43 #创建集合
44 #进⼊数据库
45 mongos> use testdb;
46 #创建集合
47 mongos> db.createCollection("mycollection")
48 mongos> show tables;
49 mycollection
50
51 #删除集合
52 #进⼊数据库
53 mongos> use testdb;
54 mongos> show tables;
55 mycollection
56 mongos> db.mycollection.drop();
57 true
58 mongos> show tables;
59
60 #插⼊⽂档
61 #插⼊⼀条⽂档
62 mongos> db.tablesname.insert([{"name":"aaaaa","age":"18"}
63 #插⼊两条⽂档
64 mongos> db.tablesname.insert([{"name":"ddddd","age":"18"},{"name":"eeee","age":"10"}]);
65 #格式化查询⽂档
66 mongos> db.tablename.find().pretty();
67 #查询⼀个⽂档:
68 mongos> db.tablesname.findOne();
69
70 #更新⽂档
71 #显⽰集合⽂档
72 mongos> db.v.find();
73 { "_id" : ObjectId("55113e5477eaee1608881c84"), "name" : "antian" }
74 #更新⽂档
75 mongos> db.tablename.update({"name":"antian"},{"name":"wuhan"});
76 #显⽰集合⽂档
77 mongos> db.tablename.find();
78 { "_id" : ObjectId("55113e5477eaee1608881c84"), "name" : "wuhan" }
79
80 #删除⽂档
81 #删除⽂档内容
82 mongos> ve({"name":"wuhan"});
83 #删除⽂档:db.tablename.drop();
84
85 #投影
86 db.tablename.find({},{"sip":1,_id:1});
87
88 #限制记录
89 mongos> db.tablename.find({},{"sip":1,_id:0}).limit(2);
90
91 #排序⽂档
92 #降序
93 mongos> db.tablename.find({},{"age":1,_id:0}).sort({"age":-1});
94 #升序
95 mongos> db.tablename.find({},{"age":1,_id:0}).sort({"age":1});
96
97 #创建索引
98 mongos> sureIndex({"id":1})
99
100
101 #mongos> db.tablesname.stats(); #数据库集合解释
102 {
103 "sharded" : false, #分⽚
104 "primary" : "shard0001",
105 "ns" : "stdocument01", #集合命令
106 "count" : 2100, #集合⽂档总数
107 "size" : 504000, #集合空间⼤⼩,单位为字节
108 "avgObjSize" : 240, #平均对象占⽤的空间
109 "numExtents" : 4, #连续分配的数据库
110 "storageSize" : 696320, #给整个集合分配的空间,当删除集合⽂档时,这个值不会降低
111 "lastExtentSize" : 524288, #最近分配的块的⼤⼩
112 "paddingFactor" : 1, #
113 "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.", 114 "userFlags" : 1,
115 "capped" : false,
116 "nindexes" : 1,
117 "totalIndexSize" : 81760, #所有索引⼤⼩的总和
118 "indexSizes" : { #列出集合的所有索引字段,以及索引⼤⼩
119 "_id_" : 81760
120 },
121 "ok" : 1
122 }
2.
1 --------------------------------------------------------------------
2 MongoDB命令管理
3 --------------------------------------------------------------------
4
5 shell操作数据库
6
7
8⼀、超级⽤户相关:
9
10 1. #进⼊数据库admin
11
12 use admin
13
14 2. #增加或修改⽤户密码
15
16 db.addUser('name','pwd')
17
18 3. #查看⽤户列表
19
20 db.system.users.find()
21
22 4. #⽤户认证
23
24 db.auth('name','pwd')
25
26 5. #删除⽤户
27
28 db.removeUser('name')
29
30 6. #查看所有⽤户
31
32 show users
33
34 7. #查看所有数据库
35
36 show dbs
37
38 8. #查看所有的collection
39
40 show collections
41
42 9. #查看各collection的状态
43
44 db.printCollectionStats()
45
46 10. #查看主从复制状态
47
48 db.printReplicationInfo()
49
50 11. #修复数据库
51
52 db.repairDatabase()
53
54 12. #设置记录profiling,0=off 1=slow 2=all
55
56 db.setProfilingLevel(1)
57
58 13. #查看profiling
59
60 show profile
61
62 14. #拷贝数据库
63
64 db.copyDatabase('mail_addr','mail_addr_tmp')
65
66 15. #删除collection
67
68 db.mail_addr.drop()
69
70 16. #删除当前的数据库
71
72 db.dropDatabase()
73
74
75
76⼆、增删改
77
78 1. #存储嵌套的对象
79
80 db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})
81
82 2. #存储数组对象
83
84 db.user_addr.save({'Uid':'yushunzhi@sohu','Al':['test-1@sohu','test-2@sohu']}) 85
86 3. #根据query条件修改,如果不存在则插⼊,允许修改多条记录
87
88 db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)
89
90 4. #删除yy=5的记录
91
92 ve({'yy':5})
93
94 5. #删除所有的记录
95
96 ve()
97
98
99
100三、索引
101
102 1. #增加索引:1(ascending),-1(descending)
103
104 sureIndex({firstname: 1, lastname: 1}, {unique: true});
105
106 2. #索引⼦对象
107
108 db.sureIndex({'Al.Em': 1})
109
110 3. #查看索引信息
111
112 Indexes()
113
114 IndexKeys()
115
116 4. #根据索引名删除索引
117
118 db.user_addr.dropIndex('Al.Em_1')
119
120
121
122四、查询
123
124 1. #查所有
125
126 db.foo.find()
127
128 2. #查⼀条记录
129
130 db.foo.findOne()
131
132 3. #根据条件检索10条记录
133
134 db.foo.find({'msg':'Hello 1'}).limit(10)
135
136 4. #sort排序
137
138 db.deliver_status.find({'From':'ixigua@sina'}).sort({'Dt',-1})
139 db.deliver_status.find().sort({'Ct':-1}).limit(1)
140
141 5. #count操作
142
143 db.unt()
144
145 6. #distinct操作,查询指定列,去重复
146
147 db.foo.distinct('msg')
148
149 7. #”>=”操作
150
151 db.foo.find({"timestamp": {"$gte" : 2}})
152
153 8. #⼦对象的查
154
155 db.foo.find({'address.city':'beijing'})
156
157
158
159五、管理
160
161 1. #查看collection数据的⼤⼩
162
163 db.deliver_status.dataSize()
164
165 2. #查看colleciont状态
166
167 db.deliver_status.stats()
168
169 3. #查询所有索引的⼤⼩
170
171 db.alIndexSize()
172
173
174
175六、advanced queries:⾼级查询
176
177条件操作符
178 $gt : >
179 $lt : <
180$gte: >=
181 $lte: <=
182$ne : !=、<>
183$in : in
184$nin: not in
185$all: all
186$not: 反匹配(1.3.3及以上版本)
187
188查询 name <> "bruce" and age >= 18 的数据
189 db.users.find({name: {$ne: "bruce"}, age: {$gte: 18}});
190
191查询 creation_date > '2010-01-01' and creation_date <= '2010-12-31' 的数据
192db.users.find({creation_date:{$gt:new Date(2010,0,1), $lte:new Date(2010,11,31)}); 193
194查询 age in (20,22,24,26) 的数据
195db.users.find({age: {$in: [20,22,24,26]}});
196
197查询 age取模10等于0 的数据
198db.users.find('this.age % 10 == 0');
199或者
200db.users.find({age : {$mod : [10, 0]}});
201
202匹配所有
203db.users.find({favorite_number : {$all : [6, 8]}});
204可以查询出{name: 'David', age: 26, favorite_number: [ 6, 8, 9 ] }
205可以不查询出{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }
206
207查询不匹配name=B*带头的记录
208db.users.find({name: {$not: /^B.*/}});
209查询 age取模10不等于0 的数据
210db.users.find({age : {$not: {$mod : [10, 0]}}});
211
212#返回部分字段
213选择返回age和_id字段(_id字段总是会被返回)
214db.users.find({}, {age:1});
215db.users.find({}, {age:3});
216db.users.find({}, {age:true});
217db.users.find({ name : "bruce" }, {age:1});
2180为false, ⾮0为true
219
220选择返回age、address和_id字段
221db.users.find({ name : "bruce" }, {age:1, address:1});
222
223排除返回age、address和_id字段
224db.users.find({}, {age:0, address:false});
225db.users.find({ name : "bruce" }, {age:0, address:false});
226
227数组元素个数判断
228对于{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }记录
229匹配db.users.find({favorite_number: {$size: 3}});
230不匹配db.users.find({favorite_number: {$size: 2}});
231
232$exists判断字段是否存在
233查询所有存在name字段的记录
234db.users.find({name: {$exists: true}});
235查询所有不存在phone字段的记录
236db.users.find({phone: {$exists: false}});
237
238$type判断字段类型
239查询所有name字段是字符类型的
240db.users.find({name: {$type: 2}});
241查询所有age字段是整型的
242db.users.find({age: {$type: 16}});
243
244对于字符字段,可以使⽤正则表达式
245查询以字母b或者B带头的所有记录
246db.users.find({name: /^b.*/i});
247
248$elemMatch(1.3.1及以上版本)
249为数组的字段中匹配其中某个元素
250
251Javascript查询和$where查询
252查询 age > 18 的记录,以下查询都⼀样
253 db.users.find({age: {$gt: 18}});
254 db.users.find({$where: "this.age > 18"});
255 db.users.find("this.age > 18");
256 f = function() {return this.age > 18} db.users.find(f);
257
258排序sort()
259以年龄升序asc
260 db.users.find().sort({age: 1});
261以年龄降序desc
262 db.users.find().sort({age: -1});
263
264限制返回记录数量limit()
265返回5条记录
266 db.users.find().limit(5);
267返回3条记录并打印信息
268 db.users.find().limit(3).forEach(function(user) {print('my age is ' + user.age)});
269结果
270 my age is 18
271 my age is 19
272 my age is 20
273
274限制返回记录的开始点skip()
275从第3条记录开始,返回5条记录(limit 3, 5)
276 db.users.find().skip(3).limit(5);
277
278查询记录条数count()
279 db.users.find().count();
280 db.users.find({age:18}).count();
281以下返回的不是5,⽽是user表中所有的记录数量
282 db.users.find().skip(10).limit(5).count();
283如果要返回限制之后的记录数量,要使⽤count(true)或者count(⾮0)
284 db.users.find().skip(10).limit(5).count(true);
285
286分组group()
287假设test表只有以下⼀条数据
288 { domain: ""
289 , invoked_at: {d:"2009-11-03", t:"17:14:05"}
290 , response_time: 0.05
291 , http_action: "GET /display/DOCS/Aggregation"
292 }
293使⽤group统计test表11⽉份的数据count:count(*)、total_time:sum(response_time)、avg_time:total_time/count;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论