mongo

mongo API

pyMongo API

{
    "_id": 1
    "username": "username0",
    "todolist": [{
        "tid": "0",
        "title": "study",
        "todo": "reading books"
    }, {
        "tid": "1",
        "title": "entertainment",
        "todo": "watching movies"
    }]
}
from pymongo import MongoClient

conn = MongoClient(host,port)#connection
db=conn['test']#database
agenda=db['agenda']#connection
  1. 查询

	record=agenda.find_one(query,projection)
	cursor=agenda.find(query,projection)
  • 返回值
    • record是object对象,可以直接访问属性
    • cursor是游标(Cursor)对象,类似于C/C++的指针,可以转换为list
      li=list(cursor)
      
      也可以通过遍历直接访问每一个元素
       for i in cursor:
        	print(i)
      
  • 参数
    • query:过滤条件

      • 完全匹配
      record = agenda.find_one('{id':1})
      
      • 操作符
      #--------comparison
       #$eq, $gt,$gte,$in, $lt, $lte, $ne,$nin
       query = {"username":{'$in':['username0','username1']}}
       #--------logical
       #$and,$not,$nor,$or
       query={'$and',['username':'username0','todolist':{'$exists':True}]}
       #----------element
       #$exists,$type
       query={'username':{'$exists':True}}
       #-----------evaluation
       #$expr,$jsonSchema,$mod,$regex,$text,$where
       query={'id':{'$mod':[3,0]}}#modulo3equals 0
       #----------array
       #$all,$elemMatch,$size
       query={'todolist':{'$elemMatch':{'title':'study','tid':0}}}
      
    • projection

      • field
      projection={'username':1}
      
      • array
      #$,$elemMatch,$slice
      cursor=agenda.find({'todolist':{'$eleMatch':{'title':'study'}}},{'todolist.$':1,'username':1})
      #↑返回包括符合title=study的第一个数组元素和username的投影
      {
      	'_id':1,
      	'username':'username0',
      	'todolist':[{
      		'tid':0,
      		'title':'study',
      		'todo':'reading books'
      	}]
      }
      ###################
      cursor=agenda.find({},{'todolist':{'$elemMatch':{'title':'study'}},'username':1})
      #和上面的$操作符执行的投影操作返回同样的结果
      ########################
      cursor=agenda.find({},{'todolist':{'$slice':-3}})
      #数组从后往前三个
      #####################
      #$rand
      db.samples.find(
      	{ '$expr': { '$lt': [0.5, {'$rand': {} } ] } }
       ).count()
       #随机选取文档
      
  1. 修改

update_one(query,op,opts)
update_many(query,op,opts)

关于query,参照第一节查询
参数说明:

  • Field oprator
    ###########field op############
    op={'username':'lihua'}
    op={'todolist.0.title':'travel'}
    #$currentDate,$inc,$min,$max,$mul,$rename,$set,$setOnInsert,$unset
    op={
    	'$currentDate':{'a':True,'b':{'$type':'date'},'c':{'$type':'timestamp'}}
    }
    op={'$min':{'lowScore':85}}#如果lowScore比85小,则更新为85
    op={'$mul':{'price':2,'num':3}}#price*2,num*3
    op={'$rename':{'username':'usrname'}}#字段改名字
    #$setOnInsert 用法和set一样,只不过是在upsert选项为True并发生了insert行为时,该操作才生效
    op={'$unset':{'username':''}}#删除username字段
    
  • Array oprators
    #####################array oprator##########
    #$,$[],$[<identifier>],$addToSet,$pop,$pull,$push,$pushAll
    op={'$set':{'todolist.$.title':'watching movies'}}
    #↑修改数组第一个匹配元素
    op={'$set':{'todolist.$[].title':'go swimming'}}
    #↑修改匹配文档的数组的所有元素
    agenda.update_many({},{'$set':{'todolist.$[ele].title':'go swimming'}},array_filters={'ele.tid':0})
    #↑修改tid为0的todo标题
    op = {'$addToSet':{'fruits':{'$each':['apple','banana']}}}
    #↑添加apple,banana到集合fruits
    op={'$pop':{'todolist':-1}}
    #↑删除第一个数组元素,1则删除最后一个元素
    op={'$pull':{'todolist':{'tid':0}}}
    op={'$pull':{'scores':{'$gt':80}}
    #↑删除数组中符合条件的元素
    op={ '$push': { 'scores': { '$each': [ 90, 92, 85 ] } } }
    #↑加入元素到数组
    op={ '$pullAll': { 'scores': [ 0, 5 ] } }
    #↑对每个元素进行匹配,匹配则删除
    op={'$push':{'scores':{'$each':[89,100],'$position':0}}}
    #↑$position 必须和$each同时出现,0代表第一个数据之前,-1表示最后一个数据之前
    op={'$push':{'scores':{'$each':[23,56,89,99],'$sort':1,$slice':4}}}
    #↑插入四个成绩,升序排列,取前四个元素
    'sort':{'age':1,'height':-1}#数组内嵌文档
    
  1. 增加
agenda.insert_one(doc)
agenda.isnert_many(docs)
  1. 删除
agenda.delete_one(filter)
agenda.delete_many(filter)
  1. 聚合
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值