MongoDB
SQL 与 NoSQL(MongoDB)的对比
关系型数据库 | MongoDB |
---|---|
数据库 | 数据库 |
表 Table | 集合 Collection |
行 Row/Tuple | 文档 Document |
列 Column | 字段 Field |
表 Join | 内嵌文档 Embedded Documents |
主键 Primary Key | 主键 Primary Key(由 MongoDB 提供的默认 key_id) |
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 &
mongo 进入客户端后, 命令 use 会创建一个新的数据库,如果该数据库存在,则返回这个数据库
> use DATABASE_NAME
命令 show dbs 来检查数据库列表, 刚创建的数据库没有出现在列表中, 为了让数据库显示出来,至少应该插入一个文档 db.DATABASE_NAME.insert({'a':'abc'})
dropDatabase() 删除数据库
> use DATABASE_NAME > db.dropDatabase()
db.createCollection(name, options)
>use DATABASE_NAME >db.createCollection("COLLECTION_NAME")
或者不需要显式创建集合。当插入一些文档时,MongoDB 会自动创建集合
>db.COLLECTION_NAME.insert({"foo" : "bar"})
>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()
导入模块并实例化一个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