启动和关闭mongodb服务:
service mongodb start
service mongodb stop
进入shell命令
> mongo
mongodb命令:
show dbs:显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表table)
show users:显示所有用户
use yourDB:切换当前数据库至yourDB
db.help() :显示数据库操作命令
db.yourCollection.help() :显示集合操作命令,yourCollection是集合名
创建表,插入数据
use school #创建数据库或使用数据库
db.createCollection('teacher') #创建Collection
#插入数据(insert与save的区别)
db.teacher.insert({id:1,name:'zhangshan',age:38})
db.teacher.insert({id:2,name:'lisi',age:47})
db.teacher.insert({id:3,name:'wangwu',age:26})
查询数据
db.teacher.count() #计数统计
db.teacher.find() #查询所有记录。相当于:select * from teacher
db.teacher.find({name: 'lisi'}) #查询name='lisi'的记录。相当于: select * from teacher where name='lisi'
db.student.find({},{name:1, age:1}) #查询指定列name、age数据。相当于:select name,age from teacher.name:1表示返回name列,默认_id字段也是返回的,可以添加_id:0(意为不返回_id)写成{name: 1, age: 1,_id:0},就不会返回默认的_id字段了
db.teacher.find({name: 'zhangshan', age: 38}) #and 与条件查询。相当于:select * from student where name = 'zhangshan' and age = 38
db.student.find({$or: [{age: 26}, {age: 38}]}) #or 条件查询。相当于:select * from teacher where age = 26 or age = 38
db.teacher.find({},{name:1,age:1,_id:0}).limit(1).skip(1) #查询第二行的name列和age列,忽略'_id'列
排序
> db.teacher.find({},{name:1, age:1, _id:0}).sort({age:-1})
{ "name" : "lisi", "age" : 47 }
{ "name" : "zhangshan", "age" : 38 }
{ "name" : "wangwu", "age" : 26 }
> db.teacher.find({},{name:1, age:1, _id:0}).sort({age:1})
{ "name" : "wangwu", "age" : 26 }
{ "name" : "zhangshan", "age" : 38 }
{ "name" : "lisi", "age" : 47 }
聚合
use school
db.createCollection('article')
db.article.insert([
{
_id: 100,
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'Maxsu',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: 101,
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'Maxsu',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
_id: 102,
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Kuber',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
},
{
_id: 103,
title: 'MySQL Overview',
description: 'MySQL is sql database',
by_user: 'Curry',
url: 'http://www.yiibai.com/mysql/',
tags: ['MySQL', 'database', 'SQL'],
likes: 350
}])
*************************************************
#count(*)
> db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{ "_id" : "Curry", "num_tutorial" : 1 }
{ "_id" : "Kuber", "num_tutorial" : 1 }
{ "_id" : "Maxsu", "num_tutorial" : 2 }
*************************************************
#avg
> db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
{ "_id" : "Curry", "num_tutorial" : 350 }
{ "_id" : "Kuber", "num_tutorial" : 750 }
{ "_id" : "Maxsu", "num_tutorial" : 55 }
*************************************************
#max
> db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
{ "_id" : "Curry", "num_tutorial" : 350 }
{ "_id" : "Kuber", "num_tutorial" : 750 }
{ "_id" : "Maxsu", "num_tutorial" : 100 }
*************************************************
#min
> db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
{ "_id" : "Curry", "num_tutorial" : 350 }
{ "_id" : "Kuber", "num_tutorial" : 750 }
{ "_id" : "Maxsu", "num_tutorial" : 10 }
*************************************************
#sum
> db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
{ "_id" : "Curry", "num_tutorial" : 350 }
{ "_id" : "Kuber", "num_tutorial" : 750 }
{ "_id" : "Maxsu", "num_tutorial" : 110 }
*************************************************
修改数据
db.youCollection.update(criteria, objNew, upsert, multi )
criteria: update的查询条件,类似sql update查询内where后面的
objNew : update的对象和一些更新的操作符(如$set)等,也可以理解为sql update查询内set后面的。
upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi: mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。默认false,只修改匹配到的第一条数据。
其中criteria和objNew是必选参数,upsert和multi可选参数
db.teacher.update({name: 'lisi'}, {$set: {age: 30}}, false, true) #相当于:update teacher set age =30 where name = 'lisi';
删除数据
db.teacher.remove({name: 'wangwu'}) #相当于:delete from teacher where name='wangwu'
删除集合
db.teacher.drop()
show collections
删除数据库
> use school
> db.dropDatabase()
{ "dropped" : "school", "ok" : 1 }
退出shell命令行模式
exit或者Ctrl+C
mongodb可视化工具:robomongo, 软件名称:robo3t.
启动robo3t:
cd ~
robo3t-1.1.1-linux-x86_64-c93c6b0/bin/robo3t #robo3t所在目录
利用Python操作mongodb
from pymongo import MongoClient
conn = MongoClient('mongodb://localhost:27017/') #连接mongodb
db = conn.testdb #使用testdb数据库
#在teacher表中插入数据
db.teacher.insert([
{"name":'zhanshan','age':25},
{"name":'lisi','age':36},
{"name":'wangwu','age':27},
])
print("OK!") #提示完成