创建mongodb用户
mongo的安装我们就不提了,这里使用的mongo版本是3.4。首先我们启动mongo,启动命令如下:
./bin/mongod -f bin/mongodb.conf
mongodb.conf的文件内容如下:
dbpath=/data/lehoo/software/mongodb/data/db
logpath=/data/lehoo/software/mongodb/data/log/mongo.log
pidfilepath=/data/lehoo/software/mongodb/mongo.pid
port=27017
fork=true
auth=false
dbpath和logpath可以自行指定,需要注意的是设置auth=false,我们需要使用非验证模式登录,创建一个超级用户,命令如下:
[root@Master mongodb]# ./bin/mongo
MongoDB shell version v3.4.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.4
> show dbs
admin 0.000GB
local 0.000GB
> use admin
switched to db admin
> show collections
system.version
> db.createUser({user:"root", pwd:"root",roles: [{role:"root",db:"admin"}]})
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
> show collections
system.users
system.version
> db.system.users.find()
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "h85b/3AU27wIiqDkNc++TQ==", "storedKey" : "lLvHeEialDyfLN4C1AVc81QUQGA=", "serverKey" : "zgfZzcI0CxVueijCc4Egz035jJo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
>
到这里我们就创建了一个超级用户,root。退出mongo,修改auth=true,命令如下:
> exit
bye
[root@Master mongodb]# ./bin/mongod -f bin/mongodb.conf -shutdown
killing process with pid: 2625
[root@Master mongodb]#
修改mongodb.conf文件内容如下:
dbpath=/data/lehoo/software/mongodb/data/db
logpath=/data/lehoo/software/mongodb/data/log/mongo.log
pidfilepath=/data/lehoo/software/mongodb/mongo.pid
port=27017
fork=true
auth=true
再次启动mongo,并使用root用户验证,命令如下:
[root@Master bin]# ./mongod -f mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 4967
child process started successfully, parent exiting
[root@Master bin]# ./mongo
MongoDB shell version v3.4.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.4
> use admin
switched to db admin
> db.auth("root","root")
1
>
使用db.auth来验证,输出结果是1,说明验证通过,下一步我们就使用root用户来创建我们自己的数据库和用户,数据库名为test,用户名为test。命令如下:
> use test
switched to db test
> db.createUser({user:"test",pwd: "test",roles:[{role:"dbOwner",db:"test"}]})
Successfully added user: {
"user" : "test",
"roles" : [
{
"role" : "dbOwner",
"db" : "test"
}
]
}
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "h85b/3AU27wIiqDkNc++TQ==", "storedKey" : "lLvHeEialDyfLN4C1AVc81QUQGA=", "serverKey" : "zgfZzcI0CxVueijCc4Egz035jJo=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "test.test", "user" : "test", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "XyUa5iXZd4DNram39wDWvA==", "storedKey" : "T/nxudYpTRtNkE9DmUtBLfKSHp4=", "serverKey" : "lbqv8A2DDjaC5peHpGWPqr6jDWk=" } }, "roles" : [ { "role" : "dbOwner", "db" : "test" } ] }
> use test
switched to db test
> db.auth("test","test")
1
>
创建成功,返回admin数据库查看users表中,多出了一个用户,然后再返回test数据库,使用db.auth验证test用户通过。那么我们现在就可以使用test用户来操作test数据库了。下面我们介绍python操作mongodb。
安装pymongo
python的安装这里也不再介绍,这里使用的python版本是3.6.0。我们使用pip的方式安装pymongo,命令如下所示:
[root@Master software]# python -V
Python 3.6.0
[root@Master software]# python -m pip install pymongo
Collecting pymongo
Downloading pymongo-3.4.0.tar.gz (583kB)
100% |████████████████████████████████| 583kB 23kB/s
Installing collected packages: pymongo
Running setup.py install for pymongo ... done
Successfully installed pymongo-3.4.0
[root@Master software]#
CRUD
上面我们已经准备好了数据库,也安装上了pymongo,这里使用pymongo来做简单的增删改查操作,操作比较简单直接看代码:
from pymongo import MongoClient
#连接字符串 mongodb://[username:password@]host1[:port1]]][/[database][?options]]
client = MongoClient("mongodb://test:test@192.168.1.235:27017/test?authMechanism=SCRAM-SHA-1") #MONGODB-CR
db = client["test"]
#插入
db.users.insert({"name":"aaa","age":20})#单条插入
db.users.save({"name":"aaa","age":20})#单条插入
db.users.insert([{"name":"bbb","age":21},{"name":"ccc","age":22}])#多条插入
#修改
db.users.update({"name":"aaa"},{"$set":{"age":2}})#单条修改
db.users.update_many({"name":"aaa"},{"$set":{"age":2}})#多条修改
#查询
user = db.users.find_one({"name":"aaa"})#单条查询
print(user["name"],user["age"])
data = db.users.find({"name":"aaa"})#多条查询
for user in data:
print(user["name"],user["age"])
#删除
db.users.remove({"name":"aaa"})
db.users.remove()#删除全部数据
client.close()
输出结果如下:
aaa 2
aaa 2
aaa 2
我们看到使用pymongo来操作mongo的语句和使用mongo命令基本相同。还是很亲切的。
自定义对象
怎么把python的对象,存储到mongodb中呢?基本思路就是把对象转化成字典结构,然后再存储。反之就是把字典结构转化为对象。直接看代码:
from pymongo import MongoClient
class User():
def __init__(self,name="",age=0,address=None):
self.name = name
self.age = age
self.address = address
#转化为字典结构
def toMap(self):
return {"name":self.name,"age":self.age,"address":self.address.toMap()}
#转化为对象
def fromDb(self,data):
self.name = data["name"]
self.age = data["age"]
self.address = Address()
self.address.fromDb(data["address"])
class Address():
def __init__(self,country="",city=""):
self.country = country
self.city = city
#转化为字典结构
def toMap(self):
return {"country":self.country,"city":self.city}
#转化为对象
def fromDb(self,data):
self.country = data["country"]
self.city = data["city"]
#创建连接
client = MongoClient("mongodb://test:test@192.168.1.235:27017/test?authMechanism=SCRAM-SHA-1") #MONGODB-CR
db = client["test"]
#创建对象
address = Address("CN","BeiJing")
user = User("aaa",20,address)
#把对象转化为字典
data = user.toMap()
print(data)
#插入数据库
db.users.insert(data)
#查询数据库
result = db.users.find_one({"name":"aaa"})
#把结构转化为对象
user1 = User()
user1.fromDb(result)
print(user1.toMap())
#删除数据
db.users.remove()
client.close()
输出结果如下:
{'age': 20, 'address': {'country': 'CN', 'city': 'BeiJing'}, 'name': 'aaa'}
{'age': 20, 'address': {'country': 'CN', 'city': 'BeiJing'}, 'name': 'aaa'}
前后对象的数据完全一致,说明操作成功。
pymongo操作mongo数据库还有很多复杂高级的操作,比如高级查询,排序,分组,Map,Reduce等。这里就介绍简单的入门操作,需要自行发掘。