mongodb数据库操作

| 分类 python  | 标签 mongodb  浏览次数: -

安装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})

参考


上一篇 安装filezilla服务器     下一篇 mysql相关操作
目录导航