MongoDB
1. 概念
SQL 与 NoSQL(MongoDB)的对比
关系型数据库 | MongoDB |
---|---|
数据库 | 数据库 |
表 Table | 集合 Collection |
行 Row/Tuple | 文档 Document |
列 Column | 字段 Field |
表 Join | 内嵌文档 Embedded Documents |
主键 Primary Key | 主键 Primary Key(由 MongoDB 提供的默认 key_id) |
2. 安装及启动服务
archlinux:
# pacman -S mongodb python-pymongo
使用systemd开启服务
# systemctl start mongodb
默认使用配置文件 /etc/mongodb.conf , 内容如下, 可以修改默认数据库路径 dbpath:
bind_ip = 127.0.0.1quiet = truedbpath = /var/lib/mongodblogpath = /var/log/mongodb/mongod.loglogappend = true
或直接启动mongodb:
# mongod --dbpath /tmp/dbfile &
3. 创建及删除数据库
mongo 进入客户端后, 命令 use 会创建一个新的数据库,如果该数据库存在,则返回这个数据库
> use DATABASE_NAME
命令 db 检查当前选定的数据库
命令 show dbs 来检查数据库列表, 刚创建的数据库没有出现在列表中, 为了让数据库显示出来,至少应该插入一个文档 db.DATABASE_NAME.insert({'a':'abc'})
dropDatabase() 删除数据库
> use DATABASE_NAME> db.dropDatabase()
4. 创建及删除集合
db.createCollection(name, options)
>use DATABASE_NAME>db.createCollection("COLLECTION_NAME")
命令 show collections 查看创建的集合
或者不需要显式创建集合。当插入一些文档时,MongoDB 会自动创建集合
>db.COLLECTION_NAME.insert({"foo" : "bar"})
命令 db.COLLECTION_NAME.drop() 删除集合
5. 增删查改文档
>db.COLLECTION_NAME.insert(document) // 插入>db.COLLECTION_NAME.find() // 查询>db.COLLECTION_NAME.find().pretty() // 格式化显示>db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA) // 更新>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA}) // 替换>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA) // 删除
更多查询:
>db.COLLECTION_NAME.find({}, {name: 1, _id: 0}); // 显示名为 name 的 field, 排除 _id 字段>db.COLLECTION_NAME.find().sort({name: 1, rating: -1}).limit(5) // 按 name 升序, rating字段降序进行排序, 只显示前5条>db.COLLECTION_NAME.count({num: {$gt: 50}}) //计数, 下同>db.COLLECTION_NAME.find({num: {$gt: 50}}).count()
pymongo
1. 入门
导入模块并实例化一个client>>> from pymongo import MongoClient>>> client = MongoClient()或指定主机和端口>>> client = MongoClient('localhost', 27017)>>> client = MongoClient('mongodb://localhost:27017/') # mongodb格式获得一个数据库:>>> db = client.test_database>>> db = client['test-database'] # 字典形式获得一个集合:>>> collection = db.test_collection>>> collection = db['test-collection']# 集合和数据库只有在被插入文档的情况下才被真正创建pymongo使用字典表示文档:>>> import datetime>>> post{'author': 'Mike', 'date': datetime.datetime(2016, 4, 15, 9, 9, 28, 367936), 'tags': ['mongodb', 'python', 'pymongo'], 'text': 'my first blog post'}插入文档:>>> posts = db.posts>>> posts.insert_one(post)>>> db.collection_names() # 查看集合名插入多个文档:>>> new_posts = [{"author": "Mike",... "text": "Another post!",... "tags": ["bulk", "insert"],... "date": datetime.datetime(2009, 11, 12, 11, 14)},... {"author": "Eliot",... "title": "MongoDB is fun",... "text": "and pretty easy too!",... "date": datetime.datetime(2009, 11, 10, 10, 45)}]>>> result = posts.insert_many(new_posts)>>> result.inserted_ids[ObjectId('...'), ObjectId('...')]获得单个文档:>>> posts.find_one()>>> posts.find_one({"author": "Mike"}) # 指定元素计数:>>> posts.count()
参考: