MongoDB
MongoDB是一个非关系型(NoSQL)的数据库
MongoChef 是mongdb的图形可视化软件
-
mongodb的操作
#普通的开启模式
mongod #开启命令
#参数
–dbpath=路径 #指定数据库的存储路径
–logpath=路径.log #指定的日子文件
–fork #默认在后台启动
–config=/etc/mongod.conf #指定使用配置文件打开#创建一个简洁的打开方式
#创建一个.sh
在文件中写入:mongod --fork --config=/etc/mongod.conf#每次启动的时候
sh xxx.sh#进入mongodb中
mongo#关闭mongodb
service mongod stop#关闭用户验证
security:
authorization: disabled#有些时候service mongod stop关闭不了
1.查看进程号:ps -aux|grep mongo
2.kill -9 进程号
数据库的操作
-
创建数据库
1.use 数据库的名字 #当数据库中没有集合,集合中没有数据,默认不显示Bson
2.db.userinfo.insert({name:‘李野’,age:62,sex:‘男’,city:‘东北’}) -
删除数据库
#选择好数据库
use 数据库
db.dropDatabase() -
查看数据库
show dbs
-
查看当前使用的数据库
db.getName()
db -
断开连接
1.exit
2.quit() -
帮助
help
集合的操作
-
查看所有的集合
show collections
-
创建集合
1.语法:db.createCollection(‘集合的名字’)
2.语法:db.集合名.insert({key:value})#前者是创建了一个空的集合,后者是带有文档的集合
-
删除集合
db.集合的名字.drop()
文档的操作
-
插入文档
1.插入单条
db.userinfo.insert({username:‘tom’,password:123456})2.插入多条
db.userinfo.insert([{username:‘tom1’,password:123456},{username:‘tom2’,password:123456}])3.save()
db.userinfo.save({name:‘jack’,age:90,sex:‘男’})
db.userinfo.save([{name:‘jack’,age:90,sex:‘男’},{name:‘jack’,age:90,sex:‘男’}]) -
更新文档
#语法:
db.userinfo.update(
{query},
{update},
{
{upset:}
{multi:}
{writeConcern:}
})
#参数说明
query:update的条件,相当sql中where
update:set(直接更新),set(直接更新),set(直接更新),inc(在原有的基础累加)
upset:可选项,如果记录不存在,是否当成新数据插入
multi:可选项,默认会更新第一条记录,默认值是false,如果为true,更新所有
writeConcern:可选,错误抛出的等级#修饰器
$set:用来指定一个键的值,如果这个键不存在,则增加,有了以后直接修改
$inc:如果已经有了该键,直接拼接#name:jack的年龄改为18
db.userinfo.update({name:‘jack’},{$set:{age:18}})db.userinfo.update({name:‘jack’},{$inc:{age:18}})
#修改所有的值
db.userinfo.update({name:‘jack’},{$set:{age:18}},{multi:1})db.userinfo.save(
{document}
{
{writeConcern:}
})
#save()执行更新,直接覆盖的过程,一定要加上_id,主要是覆盖原来的值
db.userinfo.save({name:‘李野很困’,age:18,sex:‘美男子’}) -
删除文档
#语法
db.集合名字.remove(
{query},
{
{justOne:},
{writeConcern:}
}
)#参数说明
query:当做必选,删除的条件
justOne:在mongodb中为True只会删除符合条件的一条数据,默认为false,删除全部#删除name:jack的
db.userinfo.remove({name:‘李野很困’},{justOne:true}) -
查询
#find()
#查询全部的数据
db.userinfo.find()#格式输出
db.userinfo.find().pretty()#查找一条
db.userinfo.findOne()#带有条件的查询
db.userinfo.findOne({name:‘tom’}) -
条件运算
#大于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …nfo.find({age:{gt:20}}).pretty()
#大于等于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …nfo.find({age:{gte:20}}).pretty()
#小于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …nfo.find({age:{lt:20}}).pretty()
#小于等于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …nfo.find({age:{lte:20}}).pretty()
#不等于KaTeX parse error: Expected '}', got 'EOF' at end of input: …nfo.find({age:{ne:62}}).pretty()
#使用_id进行查询
db.userinfo.find({"_id" : ObjectId(“5cac65bcb503068e96b400d2”)}).pretty()
#统计
db.userinfo.find().count()
#正则
db.userinfo.find({name:/野/})
#以困
字结尾的
db.userinfo.find({name:/困$/}) -
and和or
#and
db.userinfo.find({name:/野/,sex:‘男’})#$or
db.集合.find(
{
条件,
$or:[{条件1},{条件n}]
}
)#年龄
#select * from a where name=‘李野’ and (age=18 or age>=20);
db.userinfo.find({name:‘李野’,$or:[{age:18},{age:62}]}) -
limit和skip
#limit()
#skip() 跳过多少条
#跳过前两条
db.userinfo.find().skip(2)
#获取前两条
db.userinfo.find().limit(2)
#先略过前两条,在获取下两条
db.userinfo.find().skip(2).limit(2).pretty() -
排序
#sort(条件)
#注意:升序1,降序是-1db.userinfo.find().sort({age:-1}).skip(1).limit(2)
pymongo
pip install pymongo
from pymongo import MongoClient
from bson.objectid import ObjectId
#连接
conn = MongoClient(host='10.11.58.103',port=27017)
#选择数据库
db = conn.python
#查询
res = db.userinfo.find({'_id':ObjectId("5cac65bcb503068e96b400d2")})
for i in res:
print(i)