MongoDB和pymongo入门

原创
2016/04/15 17:25
阅读数 720

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.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



命令  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()



参考:

https://wiki.archlinux.org/index.php/MongoDB

http://api.mongodb.org/python/current/

http://wiki.jikexueyuan.com/project/mongodb/mongodb-query-document.html

展开阅读全文
打赏
1
7 收藏
分享
加载中
更多评论
打赏
0 评论
7 收藏
1
分享
返回顶部
顶部