一、创建数据库
use database
如果数据库不存在,则创建数据库,否则切换到指定数据库。
如果你想查看所有数据库,可以使用 show dbs 命令
插入一条数据:db.database.insert({"name":"jack"})
返回 WriteResult({ "nInserted" : 1 }) 成功
二、删除数据库
语法:db.dropDatabase()
三、创建集合
语法:db.createCollection(name, options)
如果要查看已有集合,可以使用 show collections 或 show tables 命令:
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合
例如:db.ty.insert({"name":"jack"})
则会自动创建ty集合
show collection 查看
四、删除结合
语法:db.collection.drop()
例如:db.ty.drop()
五、插入文档
语法:db.COLLECTION_NAME.insert(document)
例如:
db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '百度',
url: 'http://www.baidu.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
查看命令:db.col.find()
其他例子(插入多条):
db.ty.insertMany([{"b": 3}, {'c': 4}])
六、更新文档
语法:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
例子:
把名称为jack的年龄修改为20
db.ty.update({"name":"jack"},{$set:{"age":"20"}})
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
例如:
修改所有名称为jack的年龄
db.ty.update({"name":"jack"},{$set:{"age":"18"}},{multi:true})
其他例子:
只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
====
只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
七、删除文档
语法:
db.collection.remove(
<query>,
<justOne>
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
实例:
删除名称为jack的所有数据
db.cc.remove({"name","jack"})
其他实例:
删除集合下全部文档:
db.ty.deleteMany({})
删除 status 等于 A 的全部文档:
db.ty.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.ty.deleteOne( { status: "D" } )
八、查询文档
语法:db.collection.find(query, projection)
参数说明:
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value>} | db.col.find({"by":"菜鸟教程"}) | where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}) | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}) | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}) | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}) | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}) | where likes != 50 |
例如:
查询年龄等于20的
db.ty.find({"age":"20"})
查询年龄小于20的
db.ty.find({"age":{$lt:"20"}})
查询年龄小于等于20的
db.ty.find({"age":{$lte:"20"}})
查询年龄不等于20的
db.ty.find({"age":{$ne:"20"}})
AND 条件 $and:[{},{},{}]
例子:
查询姓名是jack和年龄是20的数据
db.ty.find({"name":"jack"},{"age":"20"})
OR 条件 $or:[{},{},{}]
例子:
查询姓名为jack或者年龄小于20的
db.ty.find({$or:[{"name":"jack"},{"age",{$lt:"20"}}]})
AND 结合 OR 条件
例如:
查询年龄小于18,或者姓名为tomcat的
db.ty.find({$or:[{$and:[{"age":{$lt:"18"}}]},{"name":"tomcat"}]})
包含 $in
例子
查询年龄是18,20的数据
db.ty.find({"age",{$in:['18','20']}})
不包含 $nin
例子
查询年龄不是18,20的数据
db.ty.find({"age",{$nin:['18','20']}})
不等于 $not
例子
查询名称结尾不是a字母的数据
db.ty.find({"name":{$not:/a$/}})
用来判断一个field是否存在 $exists
例子
db.ty.find({"kk":{$exists:true}}) 无返回结果
where条件
例子
db.ty.find({"$where":"this.age>20"}).pretty()
等同于
db.ty.find("this.age>20").pretty()
---------------------------------------------------------------
模糊查询:
查询名称中带字母a的数据
db.ty.find({"name":/a/})
查询名称中以a开头的数据
db.ty.find({"name":/^a/})
查询名称中以a结尾的数据
db.ty.find({"name":/a$/})
九、操作符 $type 详情类型请看文档
例子:
查询集合中 name 为 String 的数据
db.ty.find({"name":{$type:'string'}})
十、Limit与Skip方法 (分页)
语法:db.COLLECTION_NAME.find().limit(NUMBER)
skip()方法默认参数为 0
例子:
db.ty.find({"name":"jack"}).limit(2)
-- skip() == skip方法同样接受一个数字参数作为跳过的记录条数。
例子:
db.cc.find({}).limit(2).skip(2)
十一、sort() 方法(排序)
语法:db.COLLECTION_NAME.find().sort({KEY:1})
sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
例子:
db.cc.find({"name":/a/}).sort({"age":-1})
十二、索引
1、创建索引
db.collection.createIndex(keys, options)
其中1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
例子:
db.cc.createIndex({"name":1})
创建多个
db.cc.createIndex({"name":1,"age":-1})
2、查看索引
db.cc.getIndexes()
3、删除索引
根据创建格式删除
db.cc.dropIndex({"name":1})
根据索引名称删除
db.cc.dropIndex("索引名称")
删除全部索引(除主键全部删除)
db.cc.dropIndexs()
十三、聚合函数
1、count
返回总条数
db.cc.count()
返回女生的人数
db.cc.count({"sex":"女"})
返回年龄小于20的人数
db.cc.count({"age":{$lt:"20"}}) 等同于 db.cc.find({"age":{$lt:"20"}}).count()
2、distinct
db.cc.distinct("sex")
db.cc.distinct("name",{"age":{$lt:"20"}})
3、group
按照性别分组
db.cc.aggregate({$group:{"_id":"$sex"}})
查询男女各多少人
db.cc.aggregate({$group:{"_id":"$sex","count":{$sum:1}}})
查询男女最大最小多少岁
db.cc.aggregate({$group:{"_id":"$sex","max_age":{$max:"$age"},"min_age":{$min:"$age"}}})
十四、执行计划
主要用于查看索引是否生效,速度效率
语法:
db.cc.find({"name":"jack"}).explain()