安装Mongodb
安装文档可见菜鸟教程,Linux平台安装MongoDB
1.导入包管理系统使用的公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
2.为MongoDB创建一个列表文件
根据版本创建/etc/apt/sources.list.d/mongodb-org-3.4.list 列表文件
- Ubuntu 14.04
echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
- Ubuntu 16.04
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
3.安装最新版本的MongoDB
sudo apt-get update
sudo apt-get install -y mongodb-org
MongoDB在默认情况下是没有认证权限的,要想使设置的用户名和密码有效,第一步先修改MongoDB的配置文件, 将 /etc/mongod.conf
(MacOSX /usr/local/etc/mongod.conf
) 文件中的 auth=true
前面的注释去掉
查询数据存储路径
db.serverCmdLineOpts().parsed.dbpath // MongoDB 2.4 and older
db.serverCmdLineOpts().parsed.storage.dbPath // MongoDB 2.6+
Docker启动
docker run --restart=always -d -p 27017:27017 -v ~/data/mongodb:/data/db --name mongo mongo
常用命令
功能 | 命令 |
---|---|
查询所有的数据库 | show dbs |
显示当前所在的数据库 | db |
切换到其它数据库(数据库不存在则会创建) | use <数据库名字>数据库名字> |
查看数据库下所有的集合 | show tables / show collections |
删除当前所在的数据库 | db.dropDatabase() |
在当前数据库创建集合 | db.createCollection(“<集合名字>")集合名字> |
在当前数据库删除集合 | db.<集合名字>.drop()集合名字> |
在集合中插入数据 | db.<集合名字>.insert({"name": "测试插入数据"})集合名字> |
查找集合中的全部数据 | db.<集合名字>.find()集合名字> |
查找集合中的全部数据,并只展示指定字段 | db.<集合名字>.find({}, {"<需要显示的字段>": 1, "_id": 0})需要显示的字段>集合名字> |
查看集合中的索引 | db.<集合名字>.getIndexes()集合名字> |
解析ObjectId时间 | ObjectId(“50eea78d8fe78a5fe4661efd”).getTimestamp() |
查询日志级别 | db.getProfilingLevel() |
查询SQL日志 | db.system.profile.find().sort({“ts”: -1}).pretty().limit(10) |
查询命令执行次数 | db.serverStatus().opcounters |
配置文件
systemLog:
destination: file
path: /usr/local/var/log/mongodb/mongo.log
logAppend: true
storage:
dbPath: ~/packages/data/mongodb
net:
bindIp: 0.0.0.0
operationProfiling:
mode: all
用户密码
- 增加用户名和密码
db.addUser(“root”,”root”)
- 验证用户名密码是否正确
db.auth(‘root’,’root’)
MongoDB系统服务
- 查看Mongodb服务状态
sudo service mongodb status
- 停止服务
sudo service mongodb stop
- 启动服务
sudo service mongodb start
备份/恢复数据
mongodb备份整个数据库
- 无密码
mongodump -h 127.0.0.1:27017 -d <数据库名字> -o <备份目录>
- 有密码
mongodump -h 127.0.0.1 --port 27017 -u <用户名> -p <密码> -d <数据库名字> --authenticationDatabase admin -o <备份目录>
mongodb还原整个数据库
- 无密码
mongorestore -h 127.0.0.1:27017 -d <数据库名字> --directoryperdb <备份目录>
- 有密码
mongorestore -h 127.0.0.1 --port 27017 -u <用户名> -p <密码> -d <数据库名字> --authenticationDatabase admin --directoryperdb <备份目录>
查询数据库/表信息
db.stats(); # 查看数据库信息 db.posts.stats(); # 查看数据库表信息
Python语法
连接mongodb
import pymongo
connection = pymongo.Connection("127.0.0.1", 27017)
# 数据库为test
db = connection.test
# 账号为:test 密码为:test
db.authenticate("test", "test")
插入数据
import pymongo
connection=pymongo.Connection('127.0.0.1', 27017)
# connection = MongoClient() # 链接默认的host和port
db = connection.test
test = {
"appid": "xx",
"secret": "xx",
"wxtoken": "xx",
"encoding_aes_key": "xx",
"pid": "xx",
"factory_uid": "xx",
"create_date": "xx",
}
posts = db.test
posts.insert(test)
查询数据
import pymongo
connection = pymongo.Connection("127.0.0.1", 27017)
db = connection.test
db.authenticate("test", "test") #账号为:test密码为:test
result = db.test.find_one({'factory_uid': "xx"})
大于,小于
date_range = {'$gte': min_date, '$lte': max_date}
params['upload_date'] = date_range
如果存在name为user1,则更新age为21,如果不存在,则插入这条数据
db.users.update({'name':'user5'}, {'$set': {'age': 22}, '$setOnInsert': {'index':5}}, upsert=True)
db.users.update({'name':'user5'}, {'$set': {'age': 22}, upsert=True)
版本区别
对应pymongo2.x和3.x有所区别需要注意
connection=pymongo.Connection('localhost',27017)
AttributeError:'module' object has no attribute 'Connection'
原因:pymongo版本不对,pip install pymongo
安装的是 3.2
的版本
查询不匹配的元素
params["id"] = {"$nin": uid_name} # uid_name是一个列表
mongodb语法
- 大于、小于
db.getCollection('test').find({'appid':{$gte:'3',$lte:'7'}})
db.getCollection('test').find({'upload_date':{$gte: new Date('2016/03/26'),$lte: new Date('2016/04/03')}})
- 只想删掉一条记录,可以设置 justOne 为 1或true
db.test.remove({name : "peter"},true)
- 如果存在name为user1,则更新age为21,如果不存在,则插入这条数据
db.user.update({"name":"user1"}, {"$set":{"age":21}}, {"upsert":"true"})
db.user.update({"name":"user1"}, {"$set":{"age":21}, "$setOnInsert":{"sex":"female"}}, {"upsert":"true"})
- 查询不匹配的元素
db.test.find({"pageViews":{"$nin":[10000,20000]}}) #mongodb中
- Limit与Skip
db.test.find().limit(1) # 查找第一条数据
db.test.find().limit(1).skip(1) # 查找第二条数据(跳过第一条),常用于分页
- 排序
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1
和 -1
来指定排序的方式,其中 1
为升序排列,而 -1
是用于降序排列。
db.test.find().sort({test:1})