热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:mongodbAPI

篇首语:本文由编程笔记#小编为大家整理,主要介绍了mongodb-API相关的知识,希望对你有一定的参考价值。 mongodb-API连接mongo(该操作一般在初始化时就执行)出现 由于目标计算机积

篇首语:本文由编程笔记#小编为大家整理,主要介绍了mongodb-API相关的知识,希望对你有一定的参考价值。



mongodb-API


连接mongo(该操作一般在初始化时就执行)

出现 由于目标计算机积极拒绝,无法连接的错误时



  1. 查看是否进行虚拟机的端口转发



  2. 将 /etc/ 目录下的mongodb.conf 文件 bind_ip修改为 0.0.0.0, 表示任何主机都可以访问



  3. 重启服务 service mongodb restart



 import pymongo
 ?
 # 1.连接mongodb
 client = pymongo.MongoClient(host=‘127.0.0.1‘, port=27017)
 # client = pymongo.MongoClient(‘mongodb://127.0.0.1:27017/‘) # 另一种连接方式
 ?
 # 2.指定数据库(没有会自动创建)
 db = client[‘db_spider‘]
 ?
 # 3.指定集合(没有就自动创建)
 collection = db[‘student‘] # 这样就声明了一个Collection对象
 ?

 


插入数据

 # 4.插入数据
 官方推荐使用insert_one()插入单条数据, insert_many()插入多条文档
 data = {
     ‘name‘: ‘夜阑‘,
     ‘sex‘: ‘男‘,
     ‘年龄‘: 20
 }
 ?
 res = collection.insert_one(data)
 print(res) # 返回InsertOneResult 对象
 print(res.inserted_id) # 调用其inserted_id属性获取_id(每条数据都有一个id属性来唯一标识)
 ?
 data2 = {
     ‘name‘: ‘丹丹‘,
     ‘sex‘: ‘女‘,
     ‘年龄‘: 18
 }
 collection.insert_many([data, data2]) # 多条数据以列表的形式传递
 ?

 


查询


基本使用

 from pprint import pprint
 ?
 # 查询一条;可指定条件(是一个字典)
 result = collection.find_one()
 ?
 # 查看集合中的全部文档
 result1 = collection.find() # 返回Cursor类型,相当于一个生成器
 pprint(list(result1))
 for i in result1:     # 将该对象通过for遍历
     print(i)
 ?
 # 当然我们也可以通过过ObjectId来查询,使用bson库里面的objectid:
 from bson.objectid import ObjectId
 res = collection.find_one({‘_id‘: ObjectId(‘5d1b2df85a11e06dab918ec7‘)})
 ?
 # 条件查询
 collection.find({‘name‘: ‘yelan‘})
 resu = collection.find({‘age‘: {‘$gt‘: 20}}) # 查找年龄大于20的
 ?

 


噩梦条件

 and条件 {$and: [{expression1}, {expression2}, ...] }
 or 条件 {$or: [{expression1}, {expression2}, ...] }
 and 和or混用
 db.table.find({$or:[{$and:[{sex:‘女‘}, {age:18}]},{$and:[{sex:‘男‘}, {age:{$gt:18}}]}]})
 ?

比较符号










































操作符描述示例
$lt小于 less than{‘age‘: {‘$lt‘: 24}}
$gt大于 greater than{‘age‘: {‘$gt‘: 18}}
$lte小于等于 less than or equal to{‘age‘: {‘$lte‘: 20}}
$gte大于等于 great than or equal to{‘age‘: {‘$gte‘: 18}}
$ne不等于 not equal to{‘age‘: {‘$ne‘: 20}}
$in在范围内{‘age‘: {‘$in‘: [20, 30]}}
$nin不在范围内{‘age‘: {‘$nin‘: [20, 30]}}

过滤条件

支持正则匹配查询

 res = collection.find({‘name‘: {‘$regex‘: ‘^y.*‘}}) # 查询姓名以y开头的

 

find()方法支持链式的调用;或者说Collection对象的查询方法支持链式的调用


计数

调用count()方法,返回查询结果有多少条数据

 count = collection.find().count()

排序

调用sort()方法,并在其中传入排序的字段及升降序标志

pymongo.ASCENGING指定升序 || pymongo.DESCENGING指定降序

 collection.find().sort(‘name‘, pymongo.ASCENGING) # 对查询结果升序排列

限制

limit()方法,限制查询的结果。该方法接受一个int型

 collection.find().sort(‘name‘, pymongo.ASCENGING).limit(3) # 截取结果的前3个

 


更新

使用 update()_one 方法,修改一条,指定更新的条件和更新后的数据即可

 cOndition= {‘name‘: ‘yelan‘}
 res = collection.update_one(condition, {‘$set‘: {‘name‘: ‘wang‘}})
 print(res) # 返回updateResult类型,该类型有以下属性
 print(res.matched_count, res.modified_count) # 属性:获取匹配的数据条数;影响的数据条数(被修改的)
 ?
 ?
 ?
 # 当然也可以先查找,然后以字典的赋值的方式修改字段即可。如:
 student = collection.find_one(condition)
 student[‘name‘] = ‘wang‘
 ?

update_many()方法,修改满足条件的多条数据

假设我要对某文档中年龄大于18岁的所有成员+1岁。使用操作符:‘$inc‘ 自增1

cOndition= {‘age‘: {‘$gt‘: 18}}
result = collection.update_many(condition, {‘$inc‘: {‘age‘: 1}})

 


删除

remove()方法指定删除的条件即可,符合条件的数据都会删除

res = collection.remove({‘name‘: ‘yelan‘})
res会返回删除的数量

推荐使用 delete_one()和delete_many()方法分别删除满足条件的一条和多条数据

collection.delete_one({‘age‘: 20})
# 删除年龄小于18或者年龄大于60的多条数据
collection.delete_many({$or: [{‘age‘: {‘$lt‘: 18}}, {‘age‘: {‘$gt‘: 60}}]})

 


其他操作

pymongo还提供了一些组合方法,如find_one_delete()、find_one_update()等,查找后删除、查找后更新。

http://api.mongodb.com/python/curent/api/pymongo/collection.html

 


自定义封装

class MyMongodb:
def __init__(self, db, collection): # 初始化传入使用的数据库,集合
self.client = pymongo.MongoClient(host=‘127.0.0.1‘, port=27017) # 初始化时连接mongo
self.db = self.client[db] # 初始化时进入使用的数据库
self.my_col = self.db[collection] # 初始化时进入集合操作
def insert(self, dict, only_One=True):
if only_one:
self.my_col.insert_one(dict)
else:
self.my_col.insert_many(dict)
def find(self, find_One=True, ):
if find_one:
result_One= self.my_col.find_one()
pprint(result_one)
# elif find_one and condition:
# result_con = self.my_col.find_one()
# pprint(result_con)
else:
result_many = self.my_col.find()
for u in result_many:
print(u)
def update(self, data, new_data, update_One=True):
if update_one:
self.my_col.update_one(data, {‘$set‘: new_data})
else:
self.my_col.update_many(data, {‘$set‘: new_data})
def remove(self, data, delete_One=True):
if delete_one:
self.my_col.delete_one(data)
else:
self.my_col.delete_many(data)
if __name__ == ‘__main__‘: # 主程序入口
my_db = MyMongodb(‘test_db‘, ‘stu‘) # 传入的数据库和集合,有则使用,无则创建
my_db.insert({‘name‘: ‘夜阑‘, ‘sex‘: ‘男‘, ‘年龄‘: 20}) # 1.插入一条文档
my_db.insert([
{‘name‘: ‘夜阑‘, ‘sex‘: ‘男‘, ‘age‘: 18},
{‘name‘: ‘liu‘, ‘sex‘: ‘男‘, ‘age‘: 24},
{‘name‘: ‘dan‘, ‘sex‘: ‘女‘, ‘age‘: 24},
], only_One=False) # 插入多条数据
my_db.find(find_One=False) # 查看多条,默认查看一条
my_db.update({‘name‘: ‘夜阑‘}, {‘name‘: ‘小红‘, ‘age‘: 22}) # 更新一条
my_db.update({‘name‘: ‘夜阑‘}, {‘name‘: ‘小红‘, ‘age‘: 22}, update_One=False) # 更新满足条件的多条数据
my_db.remove(({‘name‘: ‘liu‘}), delete_One=False) # 删除指定的多条


推荐阅读
author-avatar
从前泪流光e_446
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有