从这两个类的继承来看,connection是继承了MongoClient的,建议使用MongoClient而不是使用Connection。(也就是说,MongoClient可以使用方法Connection都可以使用)
from pymongo import MongoClient client = MongoClient(‘192.168.40.87‘, 27037) db_name = ‘TCL_Useraction‘ db = client[db_name] collection_useraction = db[‘useraction‘]
这里是通过字典的方式访问数据库和集合,同时你也可以通过.(点号)的方式访问
2.插入数据
save() VS insert()
mongodb的save和insert函数都可以向collection里插入数据,但两者是有两个区别:
一、save函数实际就是根据参数条件,调用了insert或update函数.如果想插入的数据对象存在,insert函数会报错,而save函数是改变原来的对象;如果想插入的对象不存在,那么它们执行相同的插入操作.这里可以用几个字来概括它们两的区别,即所谓"有则改之,无则加之".
二、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。
3.更新数据
对于单个数据来说,可以更新后使用save方法
update(criteria, objNew, upsert, mult)
- criteria: 需要被更新的条件表达式
- objNew: 更新表达式
- upsert: 如目标记录不存在,是否插入新文档。
- multi: 是否更新多个文档。
collection_useraction.update({‘gid‘:last_gid, ‘time‘:l_date}, {‘$set‘:{‘gid‘:last_gid}, ‘$set‘:{‘time‘:l_date}, ‘$addToSet‘:{‘categories‘:category_data}}, upsert=True)
4.删除数据
db.users.drop() # 删除集合 # remove(self, spec_or_id=None, safe=None, multi=True, **kwargs) # remove() 用于删除单个或全部文档,删除后的文档无法恢复。 id = db.users.find_one({"name":"user2"})["_id"] db.users.remove(id) # 根据 id 删除一条记录 db.users.remove() # 删除集合里的所有记录 db.users.remove({‘yy‘:5}) # 删除yy=5的记录
5.查询
# 查询 age 小于 15 的 for u in db.users.find({"age":{"$lt":15}}): print(u)
5.1 查询一条记录
# 查询 name 等于 user8 的 for u in db.users.find({"name":"user8"}): print(u) # 获取查询的一个 u2 = db.users.find_one({"name":"user9"}) # 查不到时返回 None print(u2)
5.2 查询特定键 (fields)
特别说明:
在3.0版本中,这个参数已经改名为projection
,若用fields
会报错
# select name, age from users where age = 21 for u in db.users.find({"age":21}, ["name", "age"]): print(u) for u in db.users.find(fields = ["name", "age"]): print(u)
5.3 排序(SORT)
pymongo.ASCENDING # 也可以用 1 来代替 pymongo.DESCENDING # 也可以用 -1 来代替 for u in db.users.find().sort([("age", pymongo.ASCENDING)]): print(u) # select * from 集合名 order by 键1 for u in db.users.find().sort([("age", pymongo.DESCENDING)]): print(u) # select * from 集合名 order by 键1 desc for u in db.users.find().sort([("键1", pymongo.ASCENDING), ("键2", pymongo.DESCENDING)]): print(u) # select * from 集合名 order by 键1 asc, 键2 desc for u in db.users.find(sort = [("键1", pymongo.ASCENDING), ("键2", pymongo.DESCENDING)]): print(u) # sort 的另一种写法 for u in db.users.find({"name":"user9"}, sort=[[‘name‘,1],[‘sex‘,1]], fields = ["name", "age", ‘sex‘]): print(u) # 组合写法
fof项目中使用场景小例子:
import pymongo import datetime from pymongo import MongoClient connection = MongoClient(‘localhost‘) db = connection.fof stock_cache = db.stock_cache #post = {"20160301": "Mike","text": "My first blog post!","tags": ["mongodb", "python", "pymongo"],"date": datetime.datetime.utcnow()} post = {‘date‘:‘20160302‘,"stocks":[‘001‘,‘002‘],‘ep‘:{‘001‘:‘100‘,‘002‘:‘101‘},‘market_value‘:{‘001‘:‘100m‘,‘002‘:‘101m‘},‘stock_share‘:{‘001‘:‘100s‘,‘002‘:‘101s‘}} #db.stock_cache.drop() #db.stock_cache.insert(post) docs = db.stock_cache.find({‘date‘:‘20160301‘}) for doc in docs: stocks = doc.get(‘stocks‘) print(‘stocks‘,stocks) for stock in stocks: market_value = doc.get(‘market_value‘).get(stock) print(‘market_value‘,market_value) market_value = doc.get(‘stock_share‘).get(stock) print(‘stock_share‘, market_value) #mongoCall.insert({‘name‘:‘li‘})
时间: 2024-11-08 20:46:05