一、操作mongodb数据库
-
1、创建数据库
- 语法: use 数据库名
- 注意1:数据库不存在则创建,否则切换到指定数据库
- 注意2:新创建db若不在列表内,如要显示它,则需在新db数据库中插入一些数据。如下:
(db.person.insert({name: 'a', age: 1, sex: 'man'})
-
2、删除数据库
- 前提: 使用当前数据库(use 数据库名)
db.dropDatabase()
-
3、查看所有数据库列表
show dbs
-
4、查看当前正在使用的数据库
- a:
db
- b:
db.getName()
- a:
-
5、断开连接
exit
-
6、查看命令api
help
二、集合操作
-
1、查看当前数据库下有哪些集合
show collections
-
2、创建集合(两种方法)
- a:
-
语法:
db.createCollecion("集合名")
-
示例:
db.createCollection("job")
-
- b:
-
语法:
db.集合名.insert(document)
-
示例:
db.job.insert({name: 'a', job: 'baby'})
-
- 区别:前者只创建空的集合,后者再创建空集合的同时添加了一个文档
- a:
-
3、删除当前数据库的集合
- 语法:
db.集合名.drop()
- 示例:
db.job.drop()
- 语法:
三、文档操作
-
1、插入文档
-
a: 使用insert()方法插入文档
- 语法:
db.集合名.insert(文档)
- 插入单个:
db.person.insert({name: 'b', age: 3, sex: 'woman'})
- 语法:
db.集合名.insert([文档1,文档2])
- 插入多个
db.person.insert([{name: 'a', age: 1, sex: 'man'}, {name: 'b', age: 3, sex: 'woman'}])
- 语法:
-
b: 使用save()方法插入文档
-
语法:
db.集合名.save(文档)
-
说明:
- save()中不指定_id字段时,方法类似于insert()
- 若指定已有的_id字段,则会更新_id字段对应的数据
-
示例:
- a:
db.person.save({name: 'c', age: 18, sex: 'woman'})
- b:
db.person.save({_id:ObjectId("5ac1ef83df74c63a9bfc2d33"), name: "c", age: 18, sex: 'man'})
-
-
-
2、文档更新
-
a:update()方法用于更新已存在的文档
- 语法:
db.集合名.update( <query> <update>, { upset:<boolean>, multi:<boolean>, writeConcern:<document> } )
-
参数说明:
- query:update的查询条件,类似于sql里update语句内where后面的内容。
- update:update的对象和一些更新的操作符( s e t , set, set,inc)
- upset:可选,如不存在update的记录,是否当新数据插入,true为插入,false为不插入,默认false。
- multi:可选,mongodb默认为false,只更新找到的第一条记录,若为true,按条件找出的数据全部更新。
-
需求:将name=a的status改为inactive.
-
示例:
-
$set
- 单个修改
db.person.update({name: 'c'},{$set: {sex: 'woman'}})
- 全修改 (multi: true)
db.person.update({sex: 'woman'},{$set: {sex: 'man'}},{multi: true})
-
$inc (累加修改)
db.person.update({name: 'a'},{$inc: {age: 10}})
-
b:save()方法通过传入的文档替换已有文档。
- 语法:
db.集合名.save( document, { writeConcern:<document> } )
- 参数说明:
- document: 文档数据
- writeConcern: 可选,抛出异常的级别
-
-
3、文档删除
- 说明:再执行remove()函数前,先执行find()命令来判断执行的条件是否存在是一个良好习惯。
- 语法:
db.集合名.remove( query, { justOne:<boolean>, writeConcern:<document> } )
-
参数说明:
- query:
删除的文档的条件。- 注意:当query为"{}"时,清空集合。
- justOne: 可选,如果为true或1,则只删除一个文档
- query:
-
示例:
- query:
db.person.remove({name: 'a'})
- query为"{}"
db.person.remove({})
- justOne:
db.person.remove({sex: 'man'}, {justOne: true})
-
4、文档查询
- a: find()方法:
- 语法:
db.集合名.find()
- 查询集合下所有的文档(数据):
db.person.find()
- 语法:
- b: find()方法查询指定列
- 语法:
db.集合名.find( query, { <key1>:1, <key2>:1 } )
-
参数说明:
- query: 可选,查询条件,为空或"{}"时,显示所有。
- key: 可选,要显示的字段,1为显示,0为不显示
-
注意:
- 不指定query条件,但限制显示字段时(也可以限制不显示字段),query必须为"{}"。
db.person.find( {}, { age: 1, sex: 1 } )
- 指定query条件,但不限制显示字段时
db.person.find( { sex: 'man' } )
- 过滤掉_id(主键)显示
db.person.find( {}, { _id: 0 } )
-
c: pretty()方法以格式化形式显示文档
- 示例:
db.person.find().pretty()
-
d: findOne()方法查询匹配结果的第一条数据
- 示例:
db.person.findOne({sex: 'man'})
- a: find()方法:
-
5、查询条件操作符
-
作用:条件操作符用于比较两个表达式并从mongodb的集合中获取数据。
-
a:大于 - $gt
- 语法:
db.集合名.find( { <key>:{ $gt: <value> } } )
- 示例:
> db.person.find({age:{$gt: 10}}) { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" } { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" }
-
b:大于等于 - $gte
- 语法:
db.集合名.find({<key>:{$gte:<value>}})
- 语法:
-
c:小于 - $lt
- 语法:
db.集合名.find({<key>:{$lt:<value>}})
- 语法:
-
d:小于等于 - $lte
- 语法:
db.集合名.find({<key>:{$lte:<value>}})
- 语法:
-
e:大于等于 和 小于等于 - $gte 和 $lte
-
语法:
db.集合名.find({<key>:{$gte:<value>, $lte:<value>}})
-
示例:
> db.person.find({age:{$gte: 15, $lte: 16}}) { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" }
-
-
f:等于 - :
- 语法:
db.集合名.find({<key>:<value>})
- 语法:
-
g:使用_id进行查询
- 语法:
db.集合名.find({"_id": ObjectId("id值")})
- 示例:
> db.person.find({'_id': ObjectId("5ac31d2153013aafa493cf1c")}) { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" }
- 语法:
-
h:查询某个结果集的数据条数
- 语法:
db.集合名.find().count()
- 示例:
> db.person.find({'age':{$lte:12}}).count() 2
- 语法:
-
i:查询某个字段的值当中是否包含另一个值
- 语法:
db.集合名.find({<key>:/str/})
- 示例:
> db.person.find({'sex':/man/}) { "_id" : ObjectId("5ac31a0f53013aafa493cf1a"), "name" : "a", "age" : 1, "sex" : "man" } { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" } { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" }
- 语法:
-
j:查询某个字段的值是否以另一个值开头
-
语法:
db.集合名.find({<key>:/^str/})
-
示例:
> db.person.find({'sex':/^wo/}) { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" }
-
-
-
6、条件查询and 和 or
-
a:AND条件
- 语法:
db.集合名.find({条件1,条件2,...,条件n}})
- 示例:
> db.person.find({'sex':'man',age:{$gt:10}}) { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" }
- 语法:
-
b:OR条件
- 语法:
db.集合名.find( { $or:[{条件1},{条件2},...,{条件n}] } )
- 示例:
> db.person.find({$or:[{'sex':'woman'},{age:{$lt:10}}]}) { "_id" : ObjectId("5ac31a0f53013aafa493cf1a"), "name" : "a", "age" : 1, "sex" : "man" } { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" }
-
c:AND和OR联合使用
- 语法:
db.集合名.find( { 条件1, 条件2, $or:[{条件3},{条件4}] } )
- 示例:
> db.person.find({'sex':'woman',$or:[{'age':{$lte:10}},{'age':{$gt:10}}]}) { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" }
-
-
7、limit、skip
-
a、limit():读取指定数量的数据记录
db.person.find().limit(1)
-
b、skip():跳过指定数量的数据
db.person.find().skip(1)
-
c、skip与limit联合使用
通常用这种方式实现分页功能
示例:# 不断迭代skip值以实现分页功能 > db.person.find().skip(0).limit(1) { "_id" : ObjectId("5ac31a0f53013aafa493cf1a"), "name" : "a", "age" : 1, "sex" : "man" } > db.person.find().skip(1).limit(1) { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" } > db.person.find().skip(2).limit(1) { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" }
-
-
8、排序
- 语法:
db.集合名.find().sort({<key>:1|-1})
- 示例:
# 升序 > db.person.find().sort({'age':1}) { "_id" : ObjectId("5ac31a0f53013aafa493cf1a"), "name" : "a", "age" : 1, "sex" : "man" } { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" } { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" } # 降序 > db.person.find().sort({'age':-1}) { "_id" : ObjectId("5ac31d2153013aafa493cf1c"), "name" : "c", "age" : 15, "sex" : "man" } { "_id" : ObjectId("5ac31a0f53013aafa493cf1b"), "name" : "b", "age" : 12, "sex" : "woman" } { "_id" : ObjectId("5ac31a0f53013aafa493cf1a"), "name" : "a", "age" : 1, "sex" : "man" }
- 注意:1表示升序,-1表示降序
- 语法: