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
# systemctl start mongodb
bind_ip = 127.0.0.1
quiet = true
dbpath = /var/lib/mongodb
logpath = /var/log/mongodb/mongod.log
logappend = true
或直接启动mongodb:
# mongod --dbpath /tmp/dbfile &
3. 创建及删除数据库
mongo 进入客户端后, 命令 use 会创建一个新的数据库,如果该数据库存在,则返回这个数据库
> use DATABASE_NAME
命令 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")
或者不需要显式创建集合。当插入一些文档时,MongoDB 会自动创建集合
>db.COLLECTION_NAME.insert({"foo" : "bar"})
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()
参考:
https://wiki.archlinux.org/index.php/MongoDB
http://api.mongodb.org/python/current/
http://wiki.jikexueyuan.com/project/mongodb/mongodb-query-document.html