一、创建数据库

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()