ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pymongo操作

2021-04-18 02:32:27  阅读:231  来源: 互联网

标签:code mycol district fields find 操作 pymongo id


 安装mongoDB:直接下载安装,软件会自动配置,安装后查看服务中有mongoDB即可。

安装pymongo:pip install pymongo

 连接本地客户端:

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

连接/创建数据库:

mydb = myclient["industrial"]

连接/创建集合(相当于sql中的表):

mycol=mydb['MA']

注意:必须存入数据,集合才会被创建;

表名不能有'.',第一个字符不能是数字。

存入数据:

district_futian={'城市':'深圳','行政区':'福田'}
district_list=[district_futian,district_nanshan,district_baoan]

mycol.insert_many(district_list)
mycol.insert_one(district_futian)

不要用insert。

mongo会自动给每一条数据添加一个_id

添加新数据会自动放到集合的末尾

读取最好设置_id为False,因为_id的值不是字符串,直接使用会出错。 

 

查询:

超时:cursor默认有效时间为10分钟,超时会废弃,出现CursorNotFound error,可以设置为不限时。

cursor=mycol.find({},fields,no_cursor_timeout=True, batch_size=5)

排序(1为升序,-1为降序):

mycol.find({},fields).sort([('date',1)]):

 取得的数据就是已经排好序的。

单个数据排序(用来取最近或最早的一条数据):

last=mycol.find_one(sort=[('date',-1)])
last=mycol.find_one(sort=[('_id',-1)])

-1就是降序,取最近的一条数据。

一般可以用_id排序,因为_id本身就有顺序

跳过前面的100条数据:

mycol.find({},fields).skip(100):

 限制取前面的100条数据:

mycol.find({},fields).limit(100):

sort、skip、limit一起使用,优先级:sort>skip>limit

条件查询:

查询匹配的数据:

query={'code':'600000'}
mycol.find(query,fields)

注意find只接受两个参数,否则出错:TypeError: skip must be an instance of int

查询指令包含逻辑指令:

query={
       '$and':[{'code':'600000'},{'date':'2020-01-01'}],
       '$or':[{'code':'600000'},{'code':'600001'}])
      }
mycol.find(query,fields)

如果接收的条件是列表,可以用map函数构造表达式:

code_range=['300302','300770']
query={
       '$or':list(map(lambda x:{'code':x},code_range))
       }

更新:

增加字段:mycol.update({"_id":1},{"$set":{"new_field":0}})

删除字段:mycol.update({"_id":1},{"$unset":{"new_field":1}}) 

_id似乎可以提取时间信息。

 

标签:code,mycol,district,fields,find,操作,pymongo,id
来源: https://www.cnblogs.com/moneymaster/p/14629509.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有