数据样例

{"_id" : ObjectId("5e67343f00850012ec08ad3e"),"river": ["长江","黄河","淮河"]

}

{"_id" : ObjectId("5e67343f00850012ec08ad3f"),"river": ["长江","松花江","嘉陵江"]

}

一:普通包含查询

defget_all(self):

# 查询数组中包含长江的所有文档

result_cursor= self.db["test_info"].find({"river":"长江"})

temp=list()for result inresult_cursor:

temp.append(result)print(temp)returntemp

[{'_id': ObjectId('5e67343f00850012ec08ad3e'), 'river': ['长江', '黄河', '淮河']}, {'_id': ObjectId('5e67343f00850012ec08ad3f'), 'river': ['长江', '松花江', '嘉陵江']}]

二:$all 包含查询

数据样例

{"_id" : ObjectId("5e67343f00850012ec08ad3e"),"river": ["长江","黄河","淮河"]

}

{"_id" : ObjectId("5e67343f00850012ec08ad3f"),"river": ["长江","松花江","嘉陵江"]

}

{"_id" : ObjectId("5e6737552a89d7c2fc0cd5d1"),"river": ["长江","黄河","黄浦江"]

}

需要查询数组里面包含长江和黄河的所有文档

defget_all(self):

result_cursor= self.db["test_info"].find({"river":{"$all":["长江","黄河"]}})

temp=list()for result inresult_cursor:

temp.append(result)print(temp)returntemp

[{'_id': ObjectId('5e67343f00850012ec08ad3e'), 'river': ['长江', '黄河', '淮河']}, {'_id': ObjectId('5e6737552a89d7c2fc0cd5d1'), 'river': ['长江', '黄河', '黄浦江']}]

普通查询的 {"river":"长江"} 其实就相当于 {"river":{"$all":["长江"]}

三:指定位置(下标)查询  数组名称.index

要查询数组最后一位元素是黄浦江的文档

defget_all(self):

result_cursor= self.db["test_info"].find({"river.2":"黄浦江"})

temp=list()for result inresult_cursor:

temp.append(result)print(temp)returntemp

[{'_id': ObjectId('5e6737552a89d7c2fc0cd5d1'), 'river': ['长江', '黄河', '黄浦江']}]

四:指定长度查询 $size

查询数组长度为3的所有文档

defget_all_size(self):

result_cursor= self.db["test_info"].find({"river":{"$size":3}})

temp=list()for result inresult_cursor:

temp.append(result)print(temp)returntemp

[{'_id': ObjectId('5e67343f00850012ec08ad3e'), 'river': ['长江', '黄河', '淮河']}, {'_id': ObjectId('5e67343f00850012ec08ad3f'), 'river': ['长江', '松花江', '嘉陵江']}, {'_id': ObjectId('5e6737552a89d7c2fc0cd5d1'), 'river': ['长江', '黄河', '黄浦江']}]

五:返回数组的一个子集 $slice      find的第二个查询参数

返回查询结果数组里面的前两个元素

defget_all_size(self):

result_cursor= self.db["test_info"].find({},{"river":{"$slice":2}})

temp=list()for result inresult_cursor:

temp.append(result)print(temp)returntemp

[{'_id': ObjectId('5e67343f00850012ec08ad3e'), 'river': ['长江', '黄河']}, {'_id': ObjectId('5e67343f00850012ec08ad3f'), 'river': ['长江', '松花江']}, {'_id': ObjectId('5e6737552a89d7c2fc0cd5d1'), 'river': ['长江', '黄河']}]

defget_all_size(self):

result_cursor= self.db["test_info"].find({},{"river":{"$slice":-1}})

temp=list()for result inresult_cursor:

temp.append(result)print(temp)returntemp

[ {'_id': ObjectId('5e67343f00850012ec08ad3e'), 'river': ['淮河']}, {'_id': ObjectId('5e67343f00850012ec08ad3f'), 'river': ['嘉陵江']}, {'_id': ObjectId('5e6737552a89d7c2fc0cd5d1'), 'river': ['黄浦江']}]

返回查询结果数组里面的最后一个元素

$slice可以接受偏移量,跳过指定数量的元素,返回指定数量的元素

defget_all_size(self):

result_cursor= self.db["test_info"].find({},{"river":{"$slice":[1,2]}})

temp=list()for result inresult_cursor:

temp.append(result)print(temp)returntemp

[ {'_id': ObjectId('5e67343f00850012ec08ad3e'), 'river': ['黄河', '淮河']}, {'_id': ObjectId('5e67343f00850012ec08ad3f'), 'river': ['松花江', '嘉陵江']}, {'_id': ObjectId('5e6737552a89d7c2fc0cd5d1'), 'river': ['黄河', '黄浦江']}]

跳过数组里面的第一个元素,返回跳过后的前两个元素:如果跳过第一个元素后,剩下的元素不够两个,就返回剩下的所有元素

数据格式如下

{"_id" : ObjectId("5e688d3a2a89d7c2fc0d64ee"),"t_id" : "1","data": [

{"time" : ISODate("2020-03-07T19:59:00.000Z"),"x" : "100"},

{"time" : ISODate("2020-03-08T19:59:00.000Z"),"x" : "200"},

{"time" : ISODate("2020-03-09T19:59:00.000Z"),"x" : "300"},

{"time" : ISODate("2020-03-10T19:59:00.000Z"),"x" : "400"},

{"time" : ISODate("2020-03-11T19:59:00.000Z"),"x" : "500"}

]

}

数组里面的元素,返回指定时间段内的数据,返回 2020-03-07-2020-03-11之间的data数据

defget_list_time_range(self):ifself.connect_result:

s_time= datetime.datetime(2020,3,7,0,0,0)

e_time= datetime.datetime(2020,3,11,23,59,59)

match_dict= {"$match":{"t_id":"1"}}

unwind_dict= {"$unwind":"$data"}

project_dict= {"$project":{"_id":0,"data":1}}

match_dict2= {"$match":{"data.time":{"$gte":s_time,"$lte":e_time}}}

result= self.db["test_info"].aggregate([match_dict,unwind_dict,project_dict,match_dict2])

temp_list=list()print(result)for info inresult:

info= info["data"]print(info)

temp_list.append((info["x"],100))print(temp_list)

结果

{'time': datetime.datetime(2020, 3, 7, 19, 59), 'x': '100'}

{'time': datetime.datetime(2020, 3, 8, 19, 59), 'x': '200'}

{'time': datetime.datetime(2020, 3, 9, 19, 59), 'x': '300'}

{'time': datetime.datetime(2020, 3, 10, 19, 59), 'x': '400'}

{'time': datetime.datetime(2020, 3, 11, 19, 59), 'x': '500'}

[('100', 100), ('200', 100), ('300', 100), ('400', 100), ('500', 100)]

六,数组插入数据

$push:将内容插入指定的数组里面,不论内容是否相同,不进行去重,均执行插入

#数据样式

{"_id" : ObjectId("5e8eba932a89d7c2fc29ebb3"),"name" : "a","data_list": []

}

需求一:给 data_list插入三组一样的数据

defpush_method(self):

result= self.db["test1"].update({"name":"a"},{"$push":{"data_list":{"city":"西安"}}})print(result)#结果

{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

执行三次后的结果

{"_id" : ObjectId("5e8eba932a89d7c2fc29ebb3"),"name" : "a","data_list": [

{"city" : "西安"},

{"city" : "西安"},

{"city" : "西安"}

]

}

结果可以看出,相同的三组数据都可以插入,那么怎么让相同的数据,不能够插入呢?

#数据格式

{"_id" : ObjectId("5e8eba932a89d7c2fc29ebb3"),"name" : "a","data_list": []

}

$addToSet:将内容插入指定数组,内容相同就不执行插入,去重

执行三次的打印结果

defadd_to_set(self):

result= self.db["test1"].update({"name": "a"}, {"$addToSet": {"data_list": {"city": "西安"}}})print(result)#结果

{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

{'n': 1, 'nModified': 0, 'ok': 1.0, 'updatedExisting': True}

{'n': 1, 'nModified': 0, 'ok': 1.0, 'updatedExisting': True}

执行三次的数据样式

/* 1 */{"_id" : ObjectId("5e8eba932a89d7c2fc29ebb3"),"name" : "a","data_list": [

{"city" : "西安"}

]

}

$pushAll:版本4.0.10已经作废,可使用 push代替,插入一组数据

#数据样式

{"_id" : ObjectId("5e8eba932a89d7c2fc29ebb3"),"name" : "a","data_list": []

}

MongoDB shell version v4.0.10

报错:

pymongo.errors.WriteError: Unknown modifier: $pushAll

defpush_many_method(self):

result= self.db["test1"].update({"name": "a"}, {"$push": {"data_list":[{"city": "西安"},{"city": "南京"}]}})print(result)#结果

{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

/* 1 */{"_id" : ObjectId("5e8eba932a89d7c2fc29ebb3"),"name" : "a","data_list": [

[

{"city" : "西安"},

{"city" : "南京"}

]

]

}

可以看出,push也可以一次性,插入多组数据。

# TODO

pymongo查询列表元素_pymongo的数组操作相关推荐

  1. pymongo查询列表元素_pymongo相关操作

    导入库,建立连接 a. from pymongo import MongoClient b. client = MongoClient(host,port) 创建数据库 myDB (应该叫连接数据库, ...

  2. pymongo查询列表元素_使用PyMongo查询MongoDB数据库!

    作者|LAKSHAY ARORA 编译|Flin 来源|analyticsvidhya 介绍 随着互联网的普及,我们现在正以前所未有的速度生成数据.因为执行任何类型的分析都需要我们从数据库中收集/查询 ...

  3. pymongo查询列表元素_散列表:如何实现word编辑器的拼写检查?

    Word文档编辑器大家应该经常使用吧,大家有没有留意到它编辑功能,当我们输入一个错误的单词时,单词单面就会标红提示"拼写错误",这个功能是怎么实现的呢?其实啊,它是通过散列表实现的 ...

  4. pymongo查询列表元素_Python数据类型之列表list

    # 列表是python中最基本的数据结构,它是一个有序序列,序列中的每个元素都分配一个数字(位置,索引) # 1.我们可以使用 方括号,中括号[]来创建列表 # 2.我们可以直接将序列放在list(s ...

  5. js删除数组中指定元素_js中数组操作详解

    今天给大家带来一篇有关数组操作方法的文章. 新建数组 方法一:通过new运算符创建一个数组构造函数. var arr = new Array(); 方法二:通过方括号直接创建直接量数组. var ar ...

  6. Array数组操作(变异更新、替换)

    Array数组操作(变异更新.替换) 循环指令v-for补充 使用v-for更新渲染过的元素列表时,默认的就会使用复用策略,列表数据修改的时候,会根据key值去判断某个值是否修改:如果修改,则重新渲染 ...

  7. python中列表元素类型可以不同吗_list列表等同于数组,是一种放数据的容器

    前言 在python中,list列表数据类型其实就是一个容器,可以放置大量元素的集合.同时,list列表也有很多特点和使用场景,本文主要讲解list列表的函数方法. 概念 list列表是一个集合,一个 ...

  8. B10_NumPy数组操作、修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除

    NumPy数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resha ...

  9. Vue.js入门学习--列表渲染--v-for遍历数组生成元素(四)

    完整案列demo: <html><head><title>列表渲染--v-for遍历数组生成元素</title><script src=" ...

最新文章

  1. CF1101A Minimum Integer 模拟
  2. make时候说找不到makefile_找不到答案的时候,就去看一看这个世界
  3. oracle定时任务可以备份么,Linux下Oracle设置定时任务备份数据库的教程
  4. io操作是指什么_各种IO模型,一篇打尽
  5. r语言模型评估:_情感分析评估:对自然语言处理的过去和未来的反思
  6. sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇
  7. 熊海博客php版本,熊海CMS xhcms v1.0代码审计
  8. *第六周*数据结构实践项目二【建设链栈算法库】
  9. C++ map, 运用map统计单词出现的次数
  10. shiro会话监听_shiro session 监听
  11. 《光剑文集》青玉案: 27首
  12. 日期格式化中的大小写区别
  13. 2021年高处安装、维护、拆除新版试题及高处安装、维护、拆除考试试卷
  14. 苹果低头了,但不想丢掉它的皇冠
  15. 欧几里得(Euclid)算法
  16. 十大思想实验(思维风暴)
  17. minigui输入法汉字的获取
  18. C语言——解数独程序[源码]
  19. 常见的服务器类型有哪些?
  20. Drools 7 用OOPath遍历嵌套类型的实体对象

热门文章

  1. 桌面应用程序——测距仪
  2. php中的sql函数的作用,PHP实用函数9
  3. Unity 3D俄罗斯方块
  4. linux下emmc检测工具,eMMC芯片Bug检测工具(eMMC check)下载 v1.3.0
  5. 【多会议推荐】计算机主题,多高校单位主办,SCI会议征稿!
  6. storm中的乐器 wolven_原创吉他谱!破碎之花任务中普西拉演唱的 The Wolven Storm
  7. 学习笔记-一篇文章带你领悟frida的精髓
  8. 服务器sata接口整体性能,SATA接口数量被大幅削减
  9. Nacos 启动报错
  10. QGC二次开发 # 视频流代码分析