关于mongodb的简单了解

MongoDB

MongoDB属于非关系型数据库,基本概念涉及文档,集合,数据库。

  1. 文档(document):MongoDB中数据的基本单元,文档中有唯一的标识:"_id",在整个集合中是唯一的,文件被插入时如果没有这一项,会自动添加。
    文档的键值对时有顺序的。,顺序不同认定为不同的文档。
    文档的值可以使用字符串,整数,数组,以及文档等类型。
    文档的键是用双引号标识的字符串,不能含有空字符,点号“.“和”$"被保留,存在特定含义,最好不要用来命名,以”_"开头的键是保留的,不建议使用。
    文档区分大小写以及值类型,例如{“age”: 24} != {“age”: “24”} != {“Age”: 24}都是不同的。

  2. 集合(collection):集合在MongoDB中是一组文档,存在于数据库中,没有固定的结构,在集合中可以插入不同类型的数据。
    集合名不能为空,且不能含有空字符串。
    集合不能以"system.“开头,这是为系统保留的前缀,创建名称不能含有保留字符,比如”$".

  3. 数据库(database):一个MongoDB可以建立多个数据库,MongoDB的单个实例可以容纳多个独立的数据库,每个一有自己的权限和集合,使用show dbs可以查看所有的数据库。

创建与删除数据库

use DATABASE_NAME(数据库名),例如:use CSDN,如果CSDN数据库存在即跳转至CSDN数据库下,如果不存在,则创建新的数据库,数据库和集合为惰性创建,直到插入第一个数据才会显示,否则不显示。
删除数据库语法:db.dropDatabase(),可以删除当前数据库,使用db命令可以查询当前数据库名。

集合中文档的增删改查

  1. 插入文档,使用insert()或者save()方法向集合中插入文档。
    db.collection_name(集合名).insert(document\文档)
    例如:
db.python.insert({"title": "python",
							"likes": 100,
							"tags": ["编程", "脚本"],
							"url": "https://www.baidu.com"
							})

以上示例集合名称为python,如果该集合不存在,会自动创建集合并插入文档。

2.查询文档,使用find()方法啊从集合中查询文档,可使用pretty()方法使数据更易读。
db.collection_name.find().pretty()
例如:
db.python.find()

MongoDB中条件语句和操作符

  • 等于:{key: value},例:db.python.find({“likes”: 100}),在python集合中找到likes等于100的文档
  • 小于($lt):{key: {$lt: value}},例:db.python.find({“likes”: {$lt: 100}}),在python集合中找到likes小于100的文档。
  • 小于等于($lte):{key: {$lte: value}},例:db.python.find({“likes”: {$lte: 100}}),在python集合中找到likes小于等于100的文档。
  • 大于($gt):{key: {$gt: value}},例:db.python.find({“likes”: {$gt: 100}}),在python集合中找到likes大于100的文档。
  • 大于等于($gte):{key: {$gte: value}},例:db.python.find({“likes”: {$gte: 100}}),在python集合中找到likes大于等于100的文档。
  • 不等于($ne):{key: {$ne: value}},例:db.python.find({“likes”: {$ne: 100}}),在python集合中找到likes不等于100的文档。

find()方法可以使用多个键,以逗号隔开,实现and条件:
db.collection_name.find({key1: value1}, {key2: value2})
查找满足条件1且满足条件2

OR条件语句使用关键字“$or"
db.collection_name.find({$or: [{key1: value1}, {key2: value2}])
查找满足条件1或条件2

and条件和or条件可以同时使用
db.collection_name.find({“likes”: {$lte: 100}, $or: [{“title”: “python”}, {“tags”: “编程”, “脚本”}]})

更新文档
使用update()和save()方法来更新集合中的文档。
update()用以更新以存在的文档。

db.collection_name.update(
						query,
						update,
						{upsert: boolean,
						multi: boolean,
						writeConcern: document
						}
)
  • query:update的查询条件。
  • update:update的对象和一些更新的操作符等。
  • upsert:可选,如果不存在update的记录,是否插入新文档,True为插入,默认False
  • multi:可选,默认False,只更新找到的第一条记录,若为True,把按条件查出来的全部更新。
  • writeConcern:可选,抛出的异常级别。
db.python.update({"title": "python"}, {$set: {"title": "python_spider"}}, {multi: True})

save()方法通过传入的文档替换已有的文档。

db.collection_name.save(
				document,
				{writeConcern: document}
				)
  • document:文档数据。
  • writeConcern:抛出异常级别。

例如,替换_id为123456f78la9的文档数据。

db.python.save(
		{
		"_id": ObjectId("123456f78la9"),
		"title": "MongoDB",
		"url": "https://www.baidu.com"
		}
)

删除文档,使用remove()方法。

db.collection_name.remove(
			query,
			{
				justOne: boolean,
				writeConcern: document
			}
)
  • query:可选,删除文档的条件。
  • justOne:可选,若设置为True或者1,就只删除一个文档。
  • writeConcern:可选,抛出异常的级别。

例:db.python.remove({“title”: “python”})
如果没有query,则删除所有文档。

Python操作MongoDB

import pymongo

pymongo模块使用MongoClient对象描述一个数据库客户端,所需参数为‘host’和’port’

client = pymongo.MongoClient()
client = pymongo.MongoClient('localhost', 27017)
client = pymongo.MongoClient('mongodb://localhost:27017/')

获取数据库
一个MongoDB实例可以支持多个独立的数据库,可以通过访问MongoClient的属性的方式来访问数据库:

db = client.papers

如果数据库的名字导致属性访问不能用,可以通过字典进行访问:

db = client['pa-pers']

获取集合和获取数据库的方法一致

db = client.books 或者 db = client['books']

插入文档
数据在MongoDB中是以JSON类文件形式保存的。使用insert()方法插入文档。

book = {"author": "mike",
			"text": "python",
			"date": datetime.datetime.utcnow()
			}

book_id = collection.insert(book)

文档被插入后,如果文件内没有_id这个值,系统会自动添加一个到文件中,这是一个特殊值,在整个集合中是唯一的。insert()返回这个文件的_id值。
除了单个文件插入,也可以通过给insert()方法传入可迭代的对象作为第一个参数,进行批量插入的操作。

book = [
			{"author": "mike", "text": "python"}, 
			{"author": "jack", "age": 25}, 
			{"tags": "hack", "date": datetime.datetime.utcnow()}
			]
book_id = collection.insert(book)

查询文档
最基本的查询方法就是find_one,返回一个符合查询条件的文件,或者在没有匹配的时候返回None。

collection.find_one()

返回结果是一个之前插入的符合条件的字典类型值,返回文件中有_id这个值,是数据库添加的。

find_one()支持对特定元素进行匹配查询。

collection.find_one({”title“: "python"})

若想获得多个文档,可以使用find()方法,可以获取每个符合查询条件的文档。

for book in collection.find():
	print(book)

需要知道符合条件的文档有多少:

collection.find({"title": "python"}).count()

修改文档可以使用save()和update()方法对文档跟新,和之前那shell中方法类似。

collection.update({"author": "mike"}, {"$set": {"text": "python_book"}})

删除文档,使用remove()方法。

collection.remove({"author": "mike"})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值