{
"_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
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() #随机选取文档
-
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}#数组内嵌文档
- 增加
agenda.insert_one(doc)
agenda.isnert_many(docs)
- 删除
agenda.delete_one(filter)
agenda.delete_many(filter)
- 聚合