MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
主要特点:
集合的命名规则:
其实,多个文档组合集合,多个集合组成数据库;一个实例可以承载多个数据库;每个数据库都有独立的权限;保留的数据库名称(admin,local,config)。
安装:https://www.mongodb.com/download-center
启动:
Windows:mongod --dbpath E:\ProgramingSoftware\MongoDB\data
Mac: mongod —config /usr/local/etc/mongod.conf
Linux: sudo service mongod start
Robomongo是基于Shell的跨平台MongoDB管理工具。
下载地址:https://robomongo.org/download
安装:pip install pymongo
文档及参考
文档:http://api.mongodb.com/python/current/
Pypi: https://pypi.python.org/pypi/pymongo
Github: https://github.com/mongodb/mongo-python-driver/
连接数据库方式有三种:
client = MongoClient()
client = MongoClient(‘localhost’, 27017)
client = MongoClient(‘mongodb://localhost:27017/’)
PS: 在电脑术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。
Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进行定位。
大多数人可能熟悉”URL”,而不是URI。URL是URI命名机制的一个子集。
# -*- coding:utf-8 -*-
from pymongo import MongoClient
from datetime import datetime
from bson.objectid import ObjectId
class TestMongo(object):
def __init__(self):
self.client = MongoClient()
self.db = self.client['blog']
def add_one(self):
"""新增数据"""
post = {
'title': '新的标题',
'content': '博客内容,。。。。',
'created_at': datetime.now()
}
return self.db.blog.posts.insert_one(post)
def get_one(self):
"""查询一条数据"""
return self.db.blog.posts.find_one()
def get_more(self):
"""查询多条数据"""
return self.db.blog.posts.find({'age': 24})
def get_one_from_oid(self, oid):
"""查询指定id的数据"""
obj = ObjectId(oid)
return self.db.blog.posts.find_one({'_id': obj})
def update(self):
"""修改数据"""
# 修改一条数据
# rest = self.db.blog.posts.update_one({'age': 34}, {'$inc': {'age': 10}})
# return rest
# 修改多条数据
return self.db.blog.posts.update_many({}, {'$inc': {'age': 10}})
def delete(self):
"""删除数据"""
# 删除一条数据
# rest = self.db.blog.posts.delete_one({'age': 10})
# return rest
# 删除多条数据
return self.db.blog.posts.delete_many({})
def main():
obj = TestMongo()
# rest = obj.add_one()
# print rest.inserted_id
# rest = obj.get_one()
# print rest
# rest = obj.get_more()
# for item in rest:
# print item["name"]
# rest = obj.get_one_from_oid('59f5dbc04248ce23a8ace9a3')
# print rest
# rest = obj.update()
# print rest.matched_count, rest.modified_count
rest = obj.delete()
print rest.deleted_count
if __name__ == '__main__':
main()
pip install mongoengine
connect(‘students’)
connect(‘students’, host=’192.168.1.35’, port=27017)
connect(‘students’, host=’mongodb://localhost/students’)
# -*- coding:UTF-8 -*-
from mongoengine import connect,
EmbeddedDocument, EmbeddedDocumentField,
Document, IntField, ListField, FloatField, StringField
SEX_CHOICES = (
('male', '男'),
('female', '女')
)
class Grade(EmbeddedDocument):
"""成绩"""
name = StringField(required=True)
score = FloatField(required=True)
class Student(Document):
"""学生"""
name = StringField(max_length=32, required=True)
age = IntField(required=True)
sex = StringField(choices=SEX_CHOICES, required=True)
grade = FloatField()
address = StringField()
grades = ListField(EmbeddedDocumentField(Grade))
remark = StringField
meta = {
'collection': 'student',
'ordering': ['-age']
}
class TestMongoEngine(object):
def __init__(self):
connect('students')
def add_one(self):
"""添加一条数据到数据库"""
yuwen = Grade(
name='语文',
score=50
)
shuxue = Grade(
name='数学',
score=20
)
stu_obj = Student(
name='拉拉',
age=6,
sex='female',
grades=[yuwen, shuxue]
)
stu_obj.remark = 'remark'
stu_obj.save()
return stu_obj
def get_one(self):
"""查询一条数据"""
return Student.objects.first()
def get_more(self):
"""查询多条数据"""
return Student.objects.all()
def get_from_oid(self, oid):
"""根据ID来获取数据"""
return Student.objects.filter(pk=oid).first()
def update(self):
"""修改数据"""
# 修改一条数据
# rest = Student.objects.filter(sex='male').update_one(
# inc__age=1
# )
# return rest
# 修改多条数据
rest = Student.objects.filter(sex='male').update(
inc__age=10
)
return rest
def delete(self):
"""删除数据"""
# 删除一条数据
# rest = Student.objects.filter(sex='male').first().delete()
# return rest
# 删除多条数据
rest = Student.objects.filter().delete()
return rest
def main():
obj = TestMongoEngine()
# rest = obj.add_one()
# print rest.id
# rest = obj.get_one()
# print rest.id
# print rest.name
# rows = obj.get_more()
# for row in rows:
# print row.name
# rest = obj.get_from_oid('59f6d7184248ce22ecf5ebc3')
# if rest:
# print rest.name
# rest = obj.update()
# print rest
rest = obj.delete()
print rest
if __name__ == '__main__':
main()