MongoDB学习

mongodb 
----------------------------------------------------------
1.安装
新建 /etc/yum.repos.d/mongodb.repo,内容为
[mongodb-org]
name=MongoDB Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el$releasever/
gpgcheck=0
enabled=1

执行
sudo yum makecache
sudo yum install mongodb-org
-----------------------------------------------------
2.启动

mongodb 配置文件 /etc/mongod.conf
可以将在后台运行
mongod -fork -f /etc/mongod.conf 

提示:Failed to connect to:192.168.0.104:27017: Connection refused。
解决:
进入mongodb安装目录的bin目录,新增mongodb.conf文件,输入
bind_ip=0.0.0.0
在重新启动即可

mongodb 的数据目录  dbpath : /var/lib/mongodb/
----------------------------------------------
3.安装启动后在后台登录
/run/mongodb
路径下 bin
cd  bin
./mongo   #执行后进入到后台
----------------------------------------------
4.mongodb中 database  数据库,collection 数据库表或集合  ,document 为数据记录行或文档,field 为数据字段或域
index为索引  ,primary key 主键 自动将_id字段作为主键 
注:不支持表连接

----------------------------------------------
5.
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表。
#show  dbs;
admin     从权限角度 讲,类似root数据库,讲一个用户添加到这个数据库,用户自动集成所有数据库的权限。一些特定服务器端命令也只能从这个库上运行
config    当mongo用于分片设置时,config在内部使用,用于保存分片的相关信息
local   这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
test
执行db命令,可以显示当前数据库对象或集合
#db  
test  默认连接test
#use  local   指定连接到local库  和mysql类似,这一点

数据库名小写,最多64字节
文档document是键值对 key-value
-------------------------------------------------
6.创建数据库实例
以下实例我们创建了数据库 runoob:
use  runoob
db

show  dbs  如果看不到runoob ,可以先向其中插入一条数据后再看
db.runoob.insert({"name":"du"})
show
------------------------
#删除数据库
db.dropDatabase()
-------------------------
#创建集合
db.createCollection("runoob")
----------------------
#显示
show  collections
----------------------
#删除集合  mycol2 
db.mycol2.drop()
---------------------------------------
#插入文档,更新文档,删除文档,查询文档
insert()或save()方法向集合中插入文档
db.collection_name.insert(document)  如果插入的数据主键已经存在,会抛异常,提示主键重复,不保存
db.collection_name.save(document)  如果主键存在则更新数据,如果不存在就插入数据
runoob为集合的名字,如果该集合不在数据库中,mongodb会自动创建该集合并插入文档
db.runoob.insert({title:'mongodb',description:'nosql',by:'菜鸟教程',url:'http://www.runoob.com',tags:['mongodb','database','nosql']})
-------------------
db.runoob.find()
也可以将数据定义为一个变量
document = {title:'',description:'',tags:['','','']}
----------------------
updata 更新文档
db.collection_name.update(query,update,{
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   })
query :update的查询条件  where 后面的
update :  类似set后面的
upsert: 可选,如果不存在update记录,是否插入objNew,true 为插入,默认为false
multi:可选,默认是false,只更新第一条记录,如果为true,则更新所有查询的数据
writeConcern,可选,抛出的异常的级别
-------------------
db.runoob.update({'title':'mongodb'},{$set:{'title':'MongoDB数据库'}})
可以看到匹配的条数,是否插入记录,修改的条数
-----------------
db.runoob.find()
db.runoob.find().pretty()
-----------------------------------------------------
删除文档
db.collection.remove(query,{justOne,writeConcern})
db.runoob.remove({'title':'123'})  已过时
remove不会史芳空间,需要  db.repairDatabase()来回收磁盘空间
db.col.remove({})清空所有文档

推荐使用
deleteOne()  deleteMany()
---------------------------------------------------
查询文档
db.collection.find(query,projection)
使用易读的方式来读取数据
db.col.find().pretty()
db.col.findOne()只返回一个文档

db.col.find({"by":"菜鸟教程"}).pretty()
db.col.find({"likes":{$lt:50}}).pretty()
db.col.find({"likes":{$lte:50}}).pretty()
db.col.find({"likes":{$gte:50}}).pretty()
db.col.find({"likes":{$ne:50}}).pretty()
------------------------------------------------------
AND条件
db.col.find({key1:value1, key2:value2}).pretty()

OR条件
db.col.find({$or:[{key1:value1},{key2:value2}]})

AND OR联合使用
db.col.find({'likes':{$gt:50}, $or: [{'':''},{'':''}]}).pretty()

---------------------------------------------------
条件操作符
大于  $gt
小于  $lt
大于等于  $gte
小于等于  $lte

db.runoob.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb'],
    likes: 100
})

db.col.find({likes : {$lt : 150}})
db.col.find({likes : {$lt :200, $gt : 100}})
-------------------------------------------------
$type  查询某一列,类型为对应类型的数据
如String  对应2
db.runoob.find({'title':{$type:2}})

db.runoob.find({'title':{$type : 'string'}})

------------------------------------------------
读取指定数量的记录
limit(number)
db.runoob.find().limit(2)
------------------------------------------------
skip()跳过指定数量的数据
db.runoob.find().limit(1).skip(1)  ,取第二条文档
------------------------------------------------
排序:
sort({key:1})  ,1升序,-1 降序
db.runoob.find().sort({'likes':-1})
----------------------------------------------
创建索引
db.collection.createIndex(keys,options)
db.col.createIndex({'title':1})   1 升序,-1降序
-----------------------------------------------------
聚合
aggregate(),主要处理数据(诸如统计平均值,求和等,并返回数据计算后的结果)
????

https://www.runoob.com/mongodb/mongodb-sharding.html
-----------------------------------------------------------------------------------
7.python 安装MongoDB功能模块
pip3 install pymongo


pip3 install pymongo
-----------------------------------------------------------------------------------
使用 
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://10.8.32.79:27017/")
#mydb = myclient["runoob"]
dblist = myclient.list_database_names()
# dblist = myclient.database_names() 
if "runoob" in dblist:
  print("数据库已存在!")
  
mydb = myclient["runoob"]
collection = mydb["runoob"]
datas = collection.find()
for data  in datas:
    #print(data)
    #print(data.get('titles'))
    
-----------------------------------------------------------------------------    
创建一个集合
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"] #数据库
 
mycol = mydb["sites"]    #集合
-------------------------------------------------------------------------------
判断集合是否已经存在
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
 
mydb = myclient['runoobdb']
 
collist = mydb. list_collection_names()
# collist = mydb.collection_names()
if "sites" in collist:   # 判断 sites 集合是否存在
  print("集合已存在!")
------------------------------------------------------------------------------  
插入一个文档
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }
 
x = mycol.insert_one(mydict) 
print(x)
print(x)
---------------------------------------------------------------------------------
插入多个文档
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mylist = [
  { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
  { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
  { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
  { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
  { "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]
 
x = mycol.insert_many(mylist)
 
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)
-------------------------------------------------------------------------------
插入指定id的多个文档
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["site2"]
 
mylist = [
  { "_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"},
  { "_id": 2, "name": "Google", "address": "Google 搜索"},
  { "_id": 3, "name": "Facebook", "address": "脸书"},
  { "_id": 4, "name": "Taobao", "address": "淘宝"},
  { "_id": 5, "name": "Zhihu", "address": "知乎"}
]
 
x = mycol.insert_many(mylist)
 
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)
----------------------------------------------------------------------
查找一条数据:
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
x = mycol.find_one()
 
print(x)
----------------------------------------------------------------------
查找集合中所有数据
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
for x in mycol.find():
  print(x)
-------------------------------------------------------------------  
使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):
  print(x)

0 不返回,1返回
---------------------------------------------------------------------
以下实例除了 alexa 字段外,其他都返回;同时指定了 0 和 1 则会报错
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
for x in mycol.find({},{ "alexa": 0 }):
  print(x)
  
 ---------------------------------------------------------------------
指定条件查询
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": "RUNOOB" }
 
mydoc = mycol.find(myquery)
 
for x in mydoc:
  print(x)

-----------------------------------------------------------------------  
实例用于读取 name 字段中第一个字母 ASCII 值大于 "H" 的数据,大于的修饰符条件为 {"$gt": "H"} :  
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": { "$gt": "H" } }
 
mydoc = mycol.find(myquery)
 
for x in mydoc:
  print(x)
--------------------------------------------------------------  
以下实例用于读取 name 字段中第一个字母为 "R" 的数据,正则表达式修饰符条件为 {"$regex": "^R"} :
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": { "$regex": "^R" } }
 
mydoc = mycol.find(myquery)
 
for x in mydoc:
  print(x)
 ------------------------------------------------------- 
实例返回 3 条文档记录  
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myresult = mycol.find().limit(3)
 
# 输出结果
for x in myresult:
  print(x)
 ------------------------------------------------- 
以下实例将查找所有以 F 开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123  
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": { "$regex": "^F" } }
newvalues = { "$set": { "alexa": "123" } }
 
x = mycol.update_many(myquery, newvalues)
 
print(x.modified_count, "文档已修改")

-----------------------------------------
排序:升序
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mydoc = mycol.find().sort("alexa")
for x in mydoc:
  print(x)
------------------------------------
---降序
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mydoc = mycol.find().sort("alexa", -1)
 
for x in mydoc:
  print(x)
  
  
  
---------------------------
实例删除 name 字段值为 "Taobao" 的文档:
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": "Taobao" }
 
mycol.delete_one(myquery)
 
# 删除后输出
for x in mycol.find():
  print(x)  
  
----------------------------------------
删除多个文档,删除所有 name 字段中以 F 开头的文档:
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": {"$regex": "^F"} }
 
x = mycol.delete_many(myquery)
 
print(x.deleted_count, "个文档已删除")

----------------------------------------------
delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
x = mycol.delete_many({})
 
print(x.deleted_count, "个文档已删除")
-----------------------------------------------
删除集合
#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mycol.drop()

-------------------------------------------------

参考:

https://mirror.tuna.tsinghua.edu.cn/help/mongodb/

https://www.runoob.com/mongodb/mongodb-sharding.html

https://www.runoob.com/python3/python-mongodb.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值