AI智能
改变未来

Pymongo简单使用

Pymongo简单使用

  • Pymongo安装
  • 连接Mongodb
  • MongoClient()方式(官方建议的新方法)
  • Connection()方式(不建议使用)
  • Pymongo添加文档
    • 插入单条数据
    • 插入多条数据
  • Pymongo删除文档
    • 删除单条数据
    • 删除多条数据
    • 删除所有数据
    • 删除集合
  • Pymongo修改文档
    • 单条数据修改
    • 多条数据修改
  • Pymongo查询文档
    • 查询单条数据
    • 查询所有数据
    • 查询指定字段数据
    • 查询指定条件数据
    • 高级查询
    • 正则表达式查询
    • 查询指定条数数据
  • Pymongo排序文档
  • Pymongo安装

    直接使用pip安装即可

    pip install pymongo

    连接Mongodb

    MongoClient()方式(官方建议的新方法)

    MongoClient对象:用于与MongoDB服务器建立连接

    myclient = pymongo.MongoClient(\"mongodb://localhost:27017/\")

    需要注意的是:从pymongo3.0版本开始,MongoClient的构造函数就不会再阻塞等待MongoDB连接的建立,即使连接不上也不会上报ConnectionFailure,用户提交的资格证书是错误的也不会上报ConfigurationError。相反,构造函数会立即返回并在后台线程中加载处理连接数据的进程。
    也就是说,在使用pymongo时你需要确保自己的mongodb服务打开了,不然程序会在数据库的增删改操作中等待上相当长的时间。

    Connection()方式(不建议使用)

    connection = pymongo.Connection(\"192.168.1.2\",27017)

    MongoClient()和Connection()方法相差不大,最根本的区别在于Connection()方法的默认行为不同,connection()默认是瞬时完毕,不等server回应,而MongoClient()默认是安全操作,等server确认后才继续下一步操作。
    正因为这点,所以Connection方法操作数据库要比MongoClient方法更快一些,但官方现在已经不推荐使用。

    Pymongo添加文档

    MongoDB 中的一个文档类似 SQL 表中的一条记录。

    插入单条数据

    集合中插入文档使用 insert_one() 方法,该方法的第一参数是键值对。
    以下实例向 col 集合中插入文档:

    x = mycol.insert_one({ \"id\": 1, \"name\": \"valkyrie\", \"age\": \"20\" })print(x.inserted_id)

    insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。

    插入多条数据

    集合中插入多个文档使用 insert_many() 方法,使用方法与insert_one一样。

    x = mycol.insert_many([{\'id\': 1, \'name\': \'valkyrie\', \'age\': 20},{\'id\': 1, \'name\': \'wangiia\', \'age\': 16}])

    insert_many() 方法返回 InsertManyResult 对象,该对象包含 inserted_ids 属性,该属性保存着所有插入文档的 id 值。

    Pymongo删除文档

    删除单条数据

    可以使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
    下例删除 name 字段值为 “wangiia” 的数据:

    mycol.delete_one({ \"name\": \"wangiia\" })

    删除多条数据

    使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
    下例删除所有 name 字段中以 v 开头的文档:

    x = mycol.delete_many( { \"name\": {\"$regex\": \"^v\"} })

    删除所有数据

    delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

    x = mycol.delete_many({})

    删除集合

    用 drop() 方法来删除一个集合,下例删除了 mycol 集合:

    mycol.drop()

    如果删除成功 drop() 返回 true,如果删除失败(集合不存在)则返回 false。

    Pymongo修改文档

    单条数据修改

    我们可以使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。若查找到的匹配数据多于一条,则只会修改第一条

    mycol.update_one({ \"name\": \"valkyrie\" }, { \"$set\": { \"age\": \"16\" } })

    注意:使用$set操作符修改特定属性的值,否则会修改整个文档。

    多条数据修改

    update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()。

    x = mycol.update_many({ \"name\": \"valkyrie\" }, { \"$set\": { \"age\": \"16\" } })print(x.modified_count)

    update_many()方法返回 UpdateResult 对象,该对象包含 modified_count属性,它是更新文档数目的值。

    Pymongo查询文档

    查询单条数据

    我们可以使用 find_one() 方法来查询集合中的一条数据

    print(mycol.find_one())

    查询所有数据

    也可以使用 find()方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作

    for x in mycol.find():print(x)

    其中,查询方法find()返回的对象为Cursor对象,用于进行多行数据的遍历
    当调用集合对象的find()方法时,会返回Cursor对象,结合for…in…遍历cursor对象。

    查询指定字段数据

    find()方法中可以指定查询指定字段的数据,将要返回的字段对应值设置为 1

    for x in mycol.find({},{ \"_id\": 0, \"name\": 1, \"age\": 1 }):print(x)

    需要注意的是:除了 _id 你不能在一个对象中同时指定 0 和 1,下面的例子会报错

    for x in mycol.find({},{\'name\':0,\'age\':1}):print(x)

    报错为

    pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion.

    查询指定条件数据

    可以在 find() 中设置参数来过滤数据

    mydata = mycol.find_one({ \"name\": \"valkyrie\" })print(mydata)

    mydata = mycol.find({ \"name\": \"valkyrie\" })for x in mydata:print(x)

    高级查询

    查询的条件语句中,我们还可以使用修饰符。
    以下实例用于读取age字段中大于18的数据,大于的修饰符条件为 {\”$gt\”: 18} :

    mydata = mycol.find({ \"age\": { \"$gt\": 18 } })for x in mydata:print(x)

    正则表达式查询

    我们还可以使用正则表达式作为修饰符(只用于搜索字符串的字段)。
    以下实例用于读取name字段中以v字母开头的数据,正则式修饰符条件为 {\”$regex\”: “^v”}:

    mydata = mycol.find({ \"name\": { \"$regex\": \"^v\" } })for x in mydata:print(x)

    查询指定条数数据

    如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,参数为数字

    myresult = mycol.find().limit(2)for x in myresult:print(x)

    Pymongo排序文档

    sort() 方法可以指定升序或降序排序。第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

    下例为以age字段对文档进行排序,排序规则为升序。

    mydata = mycol.find().sort(\"age\")

    下例为以age字段对文档进行排序,排序规则为降序。

    mydata = mycol.find().sort(\"age\", -1)
    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » Pymongo简单使用