MongoDB基础概念

MongoDB基础

MongoDb属于NoSQL类型的数据库。而MySQL是传统关系型数据库。
在MongoDB中,基本的概念是文档、集合、数据库。
这里的表不叫table而叫collection集合。
这里的数据库记录行不叫row,而是以文档document的形式
这里的数据字段不叫column,而叫field域。

一.文档

MongoDB的基本单元是文档,一个文档就是一条记录,文档以键值方式存储数据,并且同一集合中的文档不需要有相同的字段,相同的字段也可以有不同的数据类型。这是MongoDB一个很突出的特点。
需要注意的是文档的键值对是有序的,键值顺序不同,文档不同。

{'book':'python','price':45.99}
{'price':45.99,'book':'python'}

文档区分类型和大小写

{'book':'python','price':45.99}
{'book':'python','price':'45.99'}
{'PRICE':'45.99','BOOK':'python'}
{‘price':'45.99','book':'python'}

文档的键不能重复,一个文档中一个键只能出现一次。与python中的字典数据类型一样。

文档的键除了少数情况外,可以使用任意UTF-8字符:

1.键不能含有\0(空字符),这个字符用来表示键的结尾
2.‘.'和‘$'为系统保留,有特别的意义。
3.以下画线'_'开头的键是保留的,建议不要使用。

二.集合

集合就是MongoDB中的文档组,类似于MySQL中的数据表。集合存在于数据库中,集合没有固定的结构,这意味着我们可以对集合插入不同格式和类型的数据。(集合中可以插入类似于python的字典,元组,列表数据类型)

三.数据库

默认数据库为'db',该数据库存储在data目录中。使用'show dbs'命令查看所有数据库,使用'db'命令查看当前使用的命令。

MongoDB数据类型

MongoDB基本操作

创建数据库

使用use DATABASE_NAME

> use scrapy
switched to db scrapy
查看所有数据库

使用show dbs查看所有数据库

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
插入数据

使用insert插入数据

> db.scrapy.insert({'python':'35.78'})
WriteResult({ "nInserted" : 1 })
删除数据库

使用db.dropDatabase()删除数据库

> db.dropDatabase()
{ "dropped" : "scrapy", "ok" : 1 }

集合操作

创建集合

使用db.createColection(title,options)创建集合。其中title为集合名称,options是可选参数。
要在数据库下使用该语法,创建名为python的集合

db.createCollection('python')

查看所有集合

使用show collections或show tables

> show collections
python
> show tables
python

文档操作

文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式的。BSON是类JSON的一种二进制形式的存储格式,是Binary JSON的简称。

在集合中插入单条文档

使用db.collection_name.insert(document)在集合中插入文档

> db.python.insert({'title':'Simple Python','author':'JanKin','price':45.89})
WriteResult({ "nInserted" : 1 })

在集合中插入多条文档

使用db.collection_name.insertMany([document1,document2,...])在集合中插入多条文档

> db.python.insertMany([{'title':'Simple Python','author':'JanKin','price':45.89},{'title':'jiji','author':'kankan','price':99}])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("616ccf815b2ca2af35aa4310"),
                ObjectId("616ccf815b2ca2af35aa4311")
        ]
}

查询文档

使用db.collection_name.find()查询文档

> db.python.find()
{ "_id" : ObjectId("616cce815b2ca2af35aa430f"), "title" : "Simple Python", "author" : "JanKin", "price" : 45.89 }
{ "_id" : ObjectId("616ccf815b2ca2af35aa4310"), "title" : "Simple Python", "author" : "JanKin", "price" : 45.89 }
{ "_id" : ObjectId("616ccf815b2ca2af35aa4311"), "title" : "jiji", "author" : "kankan", "price" : 99 }

可以使用.pretty()方法来使输出数据更易读

> db.python.find().pretty()
{
        "_id" : ObjectId("616cce815b2ca2af35aa430f"),
        "title" : "Simple Python",
        "author" : "JanKin",
        "price" : 45.89
}
{
        "_id" : ObjectId("616ccf815b2ca2af35aa4310"),
        "title" : "Simple Python",
        "author" : "JanKin",
        "price" : 45.89
}
{
        "_id" : ObjectId("616ccf815b2ca2af35aa4311"),
        "title" : "jiji",
        "author" : "kankan",
        "price" : 99
}

find()方法中添加条件语句

更精确的查找结果。
查询条件语句也可以组合使用,达到AND和OR的功能。将多个条件以逗号隔开,可以作为AND条件使用。
比如:查询集合中title为jiji,并且price大于40的数据

> db.python.find({'title':'jiji','price':{$gt:40}})
{ "_id" : ObjectId("616ccf815b2ca2af35aa4311"), "title" : "jiji", "author" : "kankan", "price" : 99 }

使用关键字$or可以执行OR条件功能。比如查询集合中title为Simple Python或者价格大于50的数据

db.python.find({$or:[{'title':'Simple Python'},{'price':{$gt:50}}]})

更新文档

还可以使用update()更新文档

db.python.update({'author':'张三',{$set:{'author':‘张起灵’}}},{multi:ture})

其中这里的{multi:ture}是update()函数的可选参数,作用是更新几条数据。默认为Fasle,表示只更新找到的第一条记录。如果为True的画,就把按条件查出来的多条记录全部更新。

删除文档

使用remove()方法删除文档

db.python.remove({'author':'张起灵',{justOne:1}})

justOne为1或者True表示删除1个。默认为false,表示删除所有匹配的文档

Python操作MongoDB查询集合

使用pymongo库

import pymongo
# from pymongo import collection

client = pymongo.MongoClient()

db = client['scrapy']  # 集合方式获取数据库,还可用属性方式
collection = db['python'] # 字典方式获取集合,还可用属性方式,就是.python

data1 = collection.find()
print('data1的数据是什么',data1) # data1的数据是什么 <pymongo.cursor.Cursor object at 0x000002D1B3472FD0>
print('data1的数据类型是什么',type(data1)) # data1的数据类型是什么 <class 'pymongo.cursor.Cursor'>
for d in data1:
    print(d)
print('-'*15)
data2 = collection.find({'author':'张起灵'})
for d in data2:
    print(d)
print('-'*15)
# 在这里条件查询语句需要加引号,而在shell中不用,如$gt
# 第一个or后面是and的条件语句
# 本句意思是查询price大于40的author为张起灵或者title为Simple Python的数据
data3 = collection.find({'price':{'$gt':40},'$or':[{'author':'张起灵'},{'title':'Simple Python'}]})
for d in data3:
    print(d)

更详细的pymongo库的操作

posted @ 2021-10-18 13:37  索匣  阅读(183)  评论(0编辑  收藏  举报