MongoDB 是一个是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。
打开终端,输入以下命令:
sudo apt-get install mongodb
截图如下:
安装完成后,在终端输入以下命令查看MongoDB版本:
mongo -version
输出版本信息,表明安装成功,截图如下:
启动和关闭mongodb命令如下:
service mongodb start
service mongodb stop
截图如下:
默认设置MongoDB是随Ubuntu启动自动启动的。
输入以下命令查看是否启动成功:
pgrep mongo -l #注意:-l是英文字母l,不是阿拉伯数字1
截图如下:
卸载MongoDB
sudo apt-get --purge remove mongodb mongodb-clients mongodb-server
输入mongo
进入shell命令模式,默认连接的数据库是test数据库,在此之前一定要确保你已经启动了MongoDB,否则会出现错误,启动之后运行成功,如下截图:
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
{'name':'guojing','gender':'男'}
{'name':'guojing','gender':'男'}
{'name':'huangrong','age':18}
{'book':'shuihuzhuan','heros':'108'}
数据库:是一个集合的物理容器,一个数据库中可以包含多个文档
一个服务器通常有多个数据库
命令
db查看当前数据库名称
db.stats()查看当前数据库信息
exit
或ctrl+c
db
show dbs
use 数据库名称
db.dropDatabase()
db.createCollection(name, options)
db.createCollection("stu")
db.createCollection("sub", { capped : true, size : 10 } )
show collections
db.集合名称.drop()
db.集合名称.insert(document)
例1
db.stu.insert({name:'gj',gender:1})
例2
s1={_id:'20160101',name:'hr'}
s1.gender=0
db.stu.insert(s1)
db.集合名称.find()
db.集合名称.update(
,
,
{multi: }
)
db.stu.update({name:'hr'},{name:'mnc'})
db.stu.insert({name:'hr',gender:0})
db.stu.update({name:'hr'},{$set:{name:'hys'}})
db.stu.update({},{$set:{gender:0}},{multi:true})
db.集合名称.save(document)
db.stu.save({_id:'20160102','name':'yk',gender:1})
db.stu.save({_id:'20160102','name':'wyk'})
db.集合名称.remove(
,
{
justOne:
}
)
db.stu.remove({gender:0},{justOne:true})
db.stu.remove({})
db.createCollection('sub',{capped:true,size:10})
db.sub.insert({title:'linux',count:10})
db.sub.find()
db.sub.insert({title:'web',count:15})
db.sub.find()
db.sub.insert({title:'sql',count:8})
db.sub.find()
db.sub.insert({title:'django',count:12})
db.sub.find()
db.sub.insert({title:'python',count:14})
db.sub.find()
db.集合名称.find({条件文档})
db.集合名称.findOne({条件文档})
db.集合名称.find({条件文档}).pretty()
db.stu.find({name:'gj'})
db.stu.find({age:{$gte:18}})
db.stu.find({age:{$gte:18},gender:1})
db.stu.find({$or:[{age:{$gt:18}},{gender:1}]})
db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})
db.stu.find({age:{$in:[18,28]}})
db.stu.find({name:/^黄/})
db.stu.find({name:{$regex:'^黄'}}})
db.stu.find({$where:function(){return this.age>20}})
db.集合名称.find().limit(NUMBER)
db.stu.find().limit(2)
db.集合名称.find().skip(NUMBER)
db.stu.find().skip(2)
for(i=0;i<15;i++){db.t1.insert({_id:i})}
db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)
db.集合名称.find({},{字段名称:1,...})
db.stu.find({},{name:1,gender:1})
db.stu.find({},{_id:0,name:1,gender:1})
db.集合名称.find().sort({字段:1,...})
db.stu.find().sort({gender:-1,age:1})
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
db.stu.find({gender:1}).count()
db.stu.count({age:{$gt:20},gender:1})
db.集合名称.distinct('去重字段',{条件})
db.stu.distinct('gender',{age:{$gt:18}})
db.集合名称.aggregate([{管道:{表达式}}])
ps ajx | grep mongo
表达式:'$列名'
[](javascript:void(0)
db.stu.aggregate([
{$group:
{
_id:'$gender',
counter:{$sum:1}
}
}
])
[](javascript:void(0)
[](javascript:void(0)
db.stu.aggregate([
{$group:
{
_id:null,
counter:{$sum:1},
avgAge:{$avg:'$age'}
}
}
])
[](javascript:void(0)
[](javascript:void(0)
db.stu.aggregate([
{$group:
{
_id:'$gender',
name:{$push:'$name'}
}
}
])
[](javascript:void(0)
db.stu.aggregate([
{$group:
{
_id:'$gender',
name:{$push:'$$ROOT'}
}
}
])
db.stu.aggregate([
{$match:{age:{$gt:20}}}
])
db.stu.aggregate([
{$match:{age:{$gt:20}}},
{$group:{_id:'$gender',counter:{$sum:1}}}
])
db.stu.aggregate([
{$project:{_id:0,name:1,age:1}}
])
db.stu.aggregate([
{$group:{_id:'$gender',counter:{$sum:1}}},
{$project:{_id:0,counter:1}}
])
b.stu.aggregate([{$sort:{age:1}}])
db.stu.aggregate([
{$group:{_id:'$gender',counter:{$sum:1}}},
{$sort:{counter:-1}}
])
db.stu.aggregate([{$limit:2}])
db.stu.aggregate([{$skip:2}])
db.stu.aggregate([
{$group:{_id:'$gender',counter:{$sum:1}}},
{$sort:{counter:1}},
{$skip:1},
{$limit:1}
])
db.集合名称.aggregate([{$unwind:'$字段名称'}])
db.t2.insert({_id:1,item:'t-shirt',size:['S','M','L']})
db.t2.aggregate([{$unwind:'$size'}])
db.inventory.aggregate([{
$unwind:{
path:'$字段名称',
preserveNullAndEmptyArrays:#防止数据丢失
}
}])
[](javascript:void(0)
db.t3.insert([
{ "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] },
{ "_id" : 2, "item" : "b", "size" : [ ] },
{ "_id" : 3, "item" : "c", "size": "M" },
{ "_id" : 4, "item" : "d" },
{ "_id" : 5, "item" : "e", "size" : null }
])
[](javascript:void(0)
db.t3.aggregate([{$unwind:'$size'}])
db.t3.aggregate([{$unwind:{path:'$sizes',preserveNullAndEmptyArrays:true}}])
use admin
db.createUser({
user:'admin',
pwd:'123',
roles:[{role:'root',db:'admin'}]
})
sudo vi /etc/mongod.conf
security:
authorization: enabled
sudo service mongod stop
sudo service mongod start
mongo -u 'admin' -p '123' --authenticationDatabase 'admin'
use test1
show users
db.createUser({
user:'t1',
pwd:'123',
roles:[{role:'readWrite',db:'test1'}]
})
mongo -u t1 -p 123 --authenticationDatabase test1
db.updateUser('t1',{pwd:'456'})
进入虚拟环境
sudo pip install pymongo
或源码安装
python setup.py
import pymongo
client=pymongo.MongoClient("localhost", 27017)
db=client.test1
stu = db.stu
s1={name:'gj',age:18}
s1_id = stu.insert_one(s1).inserted_id
s2=stu.find_one()
for cur in stu.find():
print cur
cur=stu.find()
cur.next()
cur.next()
cur.next()
print stu.count()