在python3中操作MongoDB数据库

首先了解一下MongoDB中存储数据的一些概念


对于数据路的操作无外乎对表的,集合的操作和对数据的操作。在python中进行下面的所有的操作前,都必须有这几条语句:

import pymongo
#与mongodb服务器进行连接
client = pymongo.MongoClient('localhost', 27017)
ceshi = client['ceshi']  #创建一个名为ceshi的数据库
#若直接连接已有的数据库,类似db = connection["ganji"]
item_info = ceshi['item_info']#建名为item_info的集合(表),同建立数据库形式一样

1 _id

MongoDB中存储的文档必须有一个”_id”键。这个键的值可以是任何类型的,默认是一个Objectld对象。在一个集合里面,每一个集合都有唯一的”_id”值,来确保集合里面每一个文档都被唯一的标识,如果有两个集合的话,两个集合可以都有一个值为”123”的”_id”的键,但是每一个集合只能有一个”_id”是123的文档。

2 插入、删除、更新记录(文档)

(1)对建好的集合中插入数据,用insert(),insert_one()函数
    users.insert_one({"url":item_link})#一般要表前加上数据库的名字
    ceshi.users.insert_one({"url":item_link})
(2)删除集合中的文档,用remove()函数,删除后的文档无法恢复
    ceshi.user.remove() 表示删除集合里的所有记录
    ceshi.user.remove({'yy':5}) #表删除yy=5的记录

    id = ceshi.users.find_one({"name":"user1"})["_id"]
    ceshi.users.remove(id)#找到name=user1的记录,并根据记录的id删除该记录
(3)更新记录用update()函数
    db.collection.update( criteria, objNew, upsert, multi )
    criteria: 需要被更新的条件表达式(update的查询条件,类似sql update查询内的where后面的)
    objNew: 更新表达式(update的对象和一些更新的操作符(如$,$set..)等
    upsert: 如目标记录不存在,是否插入新文档(默认为false,不插入)
    multi: 是否更新多个文档(默认为false,只更新找到的第一条记录,若为ture,就把按条件查出来的多条记录全部更新)

    ceshi.users.update({'gid':last_gid, 'time':l_date}, {'$set':{'gid':last_gid}, '$set':{'time':l_date}, '$addToSet':{'categories':category_data}}, upsert=True)
    #上式表示添加'categories'字段到gid=last_gid,time=l_date的这条记录中。

3 数据的查询(重点)

基本上用find()函数进行查询,$lt/$lte/$gt/$gte/$ne,依次等价于< / <= / > / >=/ !=。(l表示less g表示greater e表示equal n表示not )

(1)查询显示符合条件的记录
    #查询age小于15的
      for u in ceshi.users.find({"age:{"$lt":15}):print u
    # 查询 name 等于 user8 的
      for u in ceshi.users.find({"name":"user8"}): print u

    #获取查询的一个记录(注意用find_one()而不是find())
    u2 = ceshi.users.find_one({"name":"user9"}) # 查不到时返回 None
    print u2
(2)多条件进行查询
    # select * from users where name = 'user3' and age > 12 and age < 15
     for u in db.users.find({'age': {'$gt': 12, '$lt': 15}, 'name': 'user3'}): print u
# select * from users where name = 'user1' and age = 21
     for u in db.users.find({"age":21, "name":"user1"}): print u

    *记住,使用find()函数时,对应的条件都是以字典的形式表示{'age':{'$gt':12},'xx':'xx'},有多个条件时,都放在一个{}内
(3)计数,用count()函数
    # select count(*) from users  查询users表中所有的记录的个数   
        print(db.users.find().count()) 
    # select count(*) from users where age > 30 查询users表中age>30的记录
        print(db.users.find({"age":{"$gt":30}}).count())
(4)从第几行开始读取(SLICE),读取多少行(LIMIT) 
    #从第2行开始读取,读取3行记录
    for u in db.users.find().skip(2).limit(3): print u

4 导入json格式数据到Mongodb中

  1. 首先运行 mongo shell在数据库中创建一个 collection —— db.createCollection(‘the_name’)

  2. 接下来直接在终端/命令行中使用命令导入 json 格式的数据 —— mongoimport -d database_name -c collection_name F:\sample.json

以管理员权限用cd命令进入MongoDB安装目录中bin目录下,运行如下命令:
F:MongoDB>bin> mongoimport -d 数据库名字 -c 集合名字 –type 文件类型 –file 文件路径 –upsert
其中,–upsert字段的意思是以插入(insert)或者更新(update)的方式来导入数据

F:\MongoDB\bin>mongoimport -d ceshi -c item_infoX --type json --file F:\sample.json --upsert
    2016-10-06T14:55:27.643+0800    connected to: localhost
    2016-10-06T14:55:30.641+0800    [#####...................] ceshi.item_infoX     7.56MB/34.2MB (22.1%)
    2016-10-06T14:55:33.639+0800    [##########..............] ceshi.item_infoX     15.3MB/34.2MB (44.9%)
    2016-10-06T14:55:36.639+0800    [################........] ceshi.item_infoX     23.3MB/34.2MB (68.1%)
    2016-10-06T14:55:39.640+0800    [#####################...] ceshi.item_infoX     31.3MB/34.2MB (91.5%)
    2016-10-06T14:55:40.761+0800    [########################] ceshi.item_infoX     34.2MB/34.2MB (100.0%)
    2016-10-06T14:55:40.762+0800    imported 86850 documents

5 未完待续

------*** end*** ------