今天就说一说在python+Mongodb类型的项目中--find常用查询的基本写法
Mongodb中的数据以文档的形式存储,多个文档构成一个集合,多个集合构成一个数据库
现在以一条订单表为例进行操作:
查询
import re def test(order_id, b_id, state, start_time, stop_time, goods_info, a): # 创建集合 createCollection 创建文档 insert 删除文档remove 删除集合 drop # ################# find ###################### # 查询所有记录 order = MongoConn().db["order_info"].find() # 查询某条记录 order = MongoConn().db["order_info"].find_one({"_id": order_id}) # 查询某条记录并取某些字段(b_id、costMoney) order = MongoConn().db["order_info"].find_one({"_id": order_id},{"_id": 0, "b_id": 1, "costMoney": 1}) # 根据b_id和_id进行模糊查询(import re引入正则表达式) (or条件) order = MongoConn().db["order_info"].find({"$or": [{"_id": re.compile(order_id)}, {"b_id": re.compile(b_id)}]}) # and多个条件并列查询 (or是同样用法) 查询商户b_id的订单状态为state的订单 order = MongoConn().db["order_info"].find({"$and": [{"_id": re.compile(order_id)}, {"b_id": b_id}, {"state": state}]}) # 根据时间查询($gt:大于 $lt:小于 $gte:大于或等于 $lte:小于或等于) 查询介于start_time和stop_time之间的订单 order = MongoConn().db["order_info"].find({"$and": [{"createTime": {"$gt": start_time}}, {"createTime": {"$lt": stop_time}}]}) # ############### update ####################3 # 数组修改器--$push 向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。添加时键存在,要求键值类型必须是数组;键不存在,则创建数组类型的键 对订单中的goodsList数组字段内增加goods_info内容 order = MongoConn().db["order_info"].update_one({"_id": order_id}, {"$push": {"goodsList": listinfo}}) # 删除数组字段内的相应value的内容 [["a"],["dd"],["ee","ff"]]类型 # 此方法未通过验证!!
# order = MongoConn().db["order_info"].update_one({"_id": order_id}, {"$pull": {"array": a}})
# 修改器$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作 正数增加负数减少(对订单表中的order_count字段增加/减少 value )
order = MongoConn().db["order_info"].update_one({"_id": order_id}, {"$inc": {"order_count": -5 }})
# 指定一个键并更新键值,若键不存在并创建
order = MongoConn().db["order_info"].update_one({"_id": order_id}, {"$set": {"hello": "world"}})
# 对于内嵌文档在使用$set更新时,使用"."连接的方式
order = MongoConn().db["order_info"].update_one({"_id": order_id}, {"$set": {"size.width": 8}})
# 订单表删除某条字段(使用修改器$unset时,不论对目标键使用1、0、-1或者具体的字符串等都是可以删除该目标键)
order = MongoConn().db["order_info"].update_one({"_id": order_id}, {"$unset": {"hello": 1}})
order = MongoConn().db["order_info"].update_one({"_id": order_id}, {"$unset": {"hello": 0}})
———————————————————分割线———————————————————————————————
20200522
乘法:
需求:对test集合中的total字段中 大于等于752 小于773 的值 乘以 0.75
实现语句:
db.getCollection(test').update({"total": {"$lt": 773, "$gte": 752}}, {$mul:{"total":0.75}},false,true )
第一个大括号代表查询条件,第二个大括号是修改的值,
第三个参数是 upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
第四个参数是 multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。