欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python中MongoDB的使用方法

程序员文章站 2022-06-01 16:48:17
...

一、MongoDB是什么

        在百度上查询的时候主要看到三个关键字,数据库、非关系型、查询功能强大。总结为查询功能强大的非关系型数据库。什么是数据库,应该是用来存储数据的,非关系型的意思???不不不,关系型的意思我都不懂,查询功能强大的意思应该是查询起来很方便,应该有很多不同的方法的来查询需要的数据。


二、为什么使用MongoDB

        简而言之就是MongoDB有什么优点,你以为我会很正经的列出一大堆理由????不不不,我会告诉你选择MongoDB的原因是我在看《用Python学网络爬虫》!!!!!里面就用到了MongoDB!!!!!


三、MongoDB怎么在Python中使用

        正文终于开始了!!!!!!大家快拿小本本,把知识点记起来!!!!!因为我的最终目的是为了实现《用Python写网络爬虫》的代码,所以就直接写pymongo的用法了,至于怎么安装和配置会在另外一篇文章中介绍,谁叫我是为了看懂代码,连MongoDB都还没安装就来吹MongoDB怎么使用呢。。。。。

1、怎么连接MongoDB

from pymongo import MongoClient

client = MongoClient('localhost',27017)

上述代码的意思是MongoDB连接上本地主机,端口号为27017

2、怎么获得数据库

db = client.primer

cache是数据库的名字,可以随便取

3、怎么获得集合

collection = db.students

4、查看数据库中的所有集合

db.collection_names()

5、怎么删除一个集合

db.collection.drop()

    collection是集合的名字

6、怎么查看集合中的数据数目

db.collection.count()

7、怎么插入数据

db.students.insert()

db.students.insert_one()

db.stendents.insert_many([])

    暂时发现的就只有这三种方法,三种方法返回的类型并不一样。

    insert()返回值是‘_id’的值,若‘_id’缺省,'_id'的值为bson.objectid的ObjectId。该方法可以插入多条数据也可以直插入一条数据。

    insert_one()返回值是InsertOneResult,可以根据dir()查看该对象的属性值

    insert_many()能一次插入多条数据,返回值是InsertManyResult对象。

8、怎么删除集合中的数据

remove()

delete_one()

delete_many()

    remove()能只删除一条数据,也可以删除多条数据,参数是query,即匹配条件。返回值是字典,可以查看删除了多少条数据。当需要只删除一条数据时,multi=False,默认值为True。

    delete_one和delete_many顾名思义,和删除多条或单条数据的remove一样,只不过返回值为DeleteResult

9、怎么更新数据

update()

find_and_modify()

    我觉得两个方法都是一样的,但是update可以更改多条数据,find_and_modify就算添加multi=True同样不能更新多条数据。所以下面主要讲update方法。

    update的第一个参数是query,即查询条件,第二个是更新内容,第三个是upsert,第四个是multi。upsert是若匹配的数据没有更新属性,则添加,否则不更新该属性。multi为True时,能更新所有匹配数据。upsert在没有使用‘$set’的时候,会吧更新内容替代匹配数据,慎用!!!!

    $set                更新任意字段

db.students.update(
    {'age':{'$lt':28}},
    {'$set':{'age':26}},
     upsert=True,
     multi=True
)

    $unset            删除任意字段


db.students.update(
    {},
    {'$unset':{'age':1}},
     upsert=True,
     multi=True
)


$push                在特定字段追加内容

        若该字段存在,则在后面追加内容,若不存在则添加仅有该追加内容的数组,若字段存在但值不为数组,则报错。

db.students.update(
    {},
    {'$push':{'new':4}},
     upsert=True,
     multi=True
)

$pushAll        在特定字段追加数组,与$push使用方法一致

$addToSet    在特定字段追加内容,与$push一样一样的!

$pop            在特定字段删除内容

$pull            在特定字段删除内容,与$pop一样

$pullAll        在特定字段删除内容,内容为数据


10、怎么查找数据

find(query,projection)

query是查找条件

        projection可以选择显示那些键,有两种模式,第一种是需要显示的字段置1,其他字段均不显示;第二种是不需要显示的字段置0,显示其他字段。两种模式不能混用。

db.students.find(
    {},
    projection = {
        'age' : 1,
        'name' : 1
    }
)


11、比较符号

$lt                   <

$gt                  >

$lte                 <=

$gte                >=

$eq                  =

$ne                   !=


12、逻辑符号

$and                    逻辑与            a == True    and    b == True

$or                       逻辑或            a == True    or    b == True

$not                     逻辑非            a != True

$nor                     逻辑非或        a != True    or    b != True


13、Element

$exists                  判断某个字段是否存在

db.students.find(
    {
         'age'{'$exists':1}
     }
)

$type                    判断某个字段值得类型

db.students.find(
    {
         'age'{'$type':1}
     }
)

附上每个类型的代表的数值

Type Number Alias Notes
Double 1 “double”  
String 2 “string”  
Object 3 “object”  
Array 4 “array”  
Binary data 5 “binData”  
Undefined 6 “undefined” Deprecated.
ObjectId 7 “objectId”  
Boolean 8 “bool”  
Date 9 “date”  
Null 10 “null”  
Regular Expression 11 “regex”  
DBPointer 12 “dbPointer” Deprecated.
JavaScript 13 “javascript”  
Symbol 14 “symbol” Deprecated.
JavaScript (with scope) 15 “javascriptWithScope”  
32-bit integer 16 “int”  
Timestamp 17 “timestamp”  
64-bit integer 18 “long”  
Decimal128 19 “decimal” New in version 3.4.
Min key -1 “minKey”  
Max key 127 “maxKey”  

14、其他我记得的符号

$mod                        求模

{ field: { $mod: [ divisor, remainder ] } }

$all                            对值为数组的字段进行匹配,需要包含所有的元素,不计顺序

{ <field>: { $all: [ <value1> , <value2> ... ] } }

$elemMatch             对值为数组的字段进行一个个的匹配

{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }

$size                         对值为数组的字段进行长度的筛选

db.collection.find( { field: { $size: 2 } } );