pymongo操作mongo数据库的查操作
一: 数据结构
{
"_id" : ObjectId("5de8a5b748a75a8d48b72bdc"),
"farm_id" : "",
"user_id" : "",
"equipment_number" : "",
"hybridization_detail" : [
{
"hybridization_time" : "2019-11-11",
"pregnancy _time" : "2019-12-4",
"hybridization_type" : "冻精",
"object_type" : "奶牛",
"sperm_count" : "",
"sperm_number" : "",
"hybridization_control" : "性控",
"id" : ""
},
{
"hybridization_time" : "2019-11-11",
"pregnancy _time" : "2019-12-4",
"hybridization_type" : "冻精",
"object_type" : "奶牛",
"sperm_count" : "",
"sperm_number" : "",
"hybridization_control" : "性控",
"id" : ""
}
]
}
1. 普通查询 查询farm_id = 2的信息
find_one 返回的是一个字典类型的数据
from pymongo import MongoClient
import logging
lg = logging.getLogger("info")
lg.setLevel(logging.DEBUG) class Mongodb_Wrapper(object):
database_name = "test_function"
collection_name = "normal"
host = "127.0.0.1"
port = 27017
def __init__(self):
self.client = MongoClient(host=self.host,port=self.port)
self.db = self.client[self.database_name][self.collection_name] def find_one(self):
ret = self.db.find_one({"farm_id":""})
return ret m = Mongodb_Wrapper()
ret = m.find_one()
print(ret)
print(type(ret)) # 结果 {'_id': ObjectId('5de8a5b748a75a8d48b72bdc'), 'farm_id': '', 'user_id': '', 'equipment_number': '', 'hybridization_detail': [{'hybridization_time': '2019-11-11', 'pregnancy _time': '2019-12-4', 'hybridization_type': '冻精', 'object_type': '奶牛', 'sperm_count': '', 'sperm_number': '', 'hybridization_control': '性控', 'id': ''}, {'hybridization_time': '2019-11-11', 'pregnancy _time': '2019-12-4', 'hybridization_type': '冻精', 'object_type': '奶牛', 'sperm_count': '', 'sperm_number': '', 'hybridization_control': '性控', 'id': ''}]}
<class 'dict'>
不想显示_id和farm_id怎么办?可以增加第二个参数,过滤条件
def find_one(self):
ret = self.db.find_one({"farm_id":""},{"_id":0,"farm_id":0})
return ret 结果:
{'user_id': '', 'equipment_number': '', 'hybridization_detail': [{'hybridization_time': '2019-11-11', 'pregnancy _time': '2019-12-4', 'hybridization_type': '冻精', 'object_type': '奶牛', 'sperm_count': '', 'sperm_number': '', 'hybridization_control': '性控', 'id': ''}, {'hybridization_time': '2019-11-11', 'pregnancy _time': '2019-12-4', 'hybridization_type': '冻精', 'object_type': '奶牛', 'sperm_count': '', 'sperm_number': '', 'hybridization_control': '性控', 'id': ''}]}
<class 'dict'>
根据列表里面的字段进行查询
只想显示 "id" : "15755278639220782"的这条数据怎么办,通过限制 hybridization_detail的值进行查询,$elemMatch进行操作
情况一:唯一值字段 id
def find_one(self):
ret = self.db.find_one({"hybridization_detail.id":""},{"hybridization_detail":{"$elemMatch":{"id":""}}})
return ret # 结果 {'_id': ObjectId('5de8a5b748a75a8d48b72bdc'), 'hybridization_detail': [{'hybridization_time': '2019-11-11', 'pregnancy _time': '2019-12-4', 'hybridization_type': '冻精', 'object_type': '奶牛', 'sperm_count': '', 'sperm_number': '', 'hybridization_control': '性控', 'id': ''}]}
<class 'dict'>
但是不想显示_id字段,增加过滤条件
def find_one(self):
ret = self.db.find_one({"hybridization_detail.id":""},{"_id":0},{"hybridization_detail":{"$elemMatch":{"id":""}}})
return ret # 结果:TypeError: skip must be an instance of int
情况二:不唯一值字段 id以外的所有字段:只显示匹配到的第一个字段,因此要保证数据的唯一性,就增加有唯一值的字段。
def find_one(self):
ret = self.db.find_one({"hybridization_detail.sperm_count":""},{"hybridization_detail":{"$elemMatch":{"sperm_count":""}}})
return ret #结果:只显示匹配到的第一个数据
{'_id': ObjectId('5de8a5b748a75a8d48b72bdc'), 'hybridization_detail': [{'hybridization_time': '2019-11-11', 'pregnancy _time': '2019-12-4', 'hybridization_type': '冻精', 'object_type': '奶牛', 'sperm_count': '', 'sperm_number': '', 'hybridization_control': '性控', 'id': ''}]}
<class 'dict'>
修改数据结构为
{
"_id" : ObjectId("5de8a5b748a75a8d48b72bdc"),
"farm_id" : "",
"user_id" : "",
"equipment_number" : "",
"hybridization_detail" : [
{
"hybridization_time" : "2019-11-11",
"pregnancy _time" : "2019-12-4",
"hybridization_type" : "冻精",
"object_type" : "奶牛",
"sperm_count" : "",
"sperm_number" : "",
"hybridization_control" : "性控",
"id" : ""
},
{
"hybridization_time" : "2019-11-12",
"pregnancy _time" : "2019-12-5",
"hybridization_type" : "冻精",
"object_type" : "奶牛",
"sperm_count" : "",
"sperm_number" : "",
"hybridization_control" : "性控",
"id" : ""
},
{
"hybridization_time" : "2019-11-13",
"pregnancy _time" : "2019-12-6",
"hybridization_type" : "冻精",
"object_type" : "奶牛",
"sperm_count" : "",
"sperm_number" : "",
"hybridization_control" : "性控",
"id" : ""
},
{
"hybridization_time" : "2019-11-14",
"pregnancy _time" : "2019-12-7",
"hybridization_type" : "冻精",
"object_type" : "奶牛",
"sperm_count" : "",
"sperm_number" : "",
"hybridization_control" : "性控",
"id" : ""
}
]
}
查询 "hybridization_time" 的时间从2019-11-11到2019-11-13的数据
# TODO
pymongo操作mongo数据库的查操作的更多相关文章
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- Python操作Mongo数据库
连接数据库 import pymongo # 连接到数据库,以下两种方式均可 client = pymongo.MongoClient(host='localhost', port=27017) cl ...
- 使用Mongo官方驱动操作Mongo数据库
首先到 https://github.com/mongodb/mongo-csharp-driver/downloads 下载Mongo官方驱动 下载完成后引用到项目中 public class Co ...
- mongo数据库的常见操作
连接mongodb数据库的命令查看对应数据库mongo.exeuse shujukuming;db.opportunity.findOne({"id":5}); db.opport ...
- flask操作(增删改查操作)
增加数据 from .models import Goods from app.extensions import db goods1 = Goods(name='魅族18s', price=3400 ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- 一些常用的操作MySQL数据库的sql语句
创建数据库:create database 数据库名; 删除数据库:drop datebase 数据库名; 查看数据库:show databases;(所有数据库) 使用数据库:use 数据库名;(之 ...
- lucene索引库的增删改查操作
1. 索引库的操作 保持数据库与索引库的同步 说明:在一个系统中,如果索引功能存在,那么数据库和索引库应该是同时存在的.这个时候需要保证索引库的数据和数据库中的数据保持一致性.可以在对数据库进行增.删 ...
- koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
随机推荐
- 卡方检验(python代码实现)
https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博 ...
- seleniumIDE回放找不到页面元素
seleniumIDE回放找不到页面元素 如下所示,自动回放就报错,手动执行就不报错.
- Docker追加容器端口映射
参考文章: https://blog.csdn.net/chouzhou9701/article/details/86725203
- PHP 数组函数 内部指针
current( &$arr ) 每个数组的当前单元,初始值的 数组的第一个单元next ( &$arr ) 返回数组中的下一个单元 , 如果没值则返回falshprev ( & ...
- python里一个class可以定义多个构造函数
不行,一个class只能有一个用于构造对象的__init__函数但python中的变量是无类型的,因此传给__init__的参数可以是任何类型python中的函数参数在定义时可以有默认值,可以让__i ...
- 【SD系列】SAP SD模块-送达方和售达方的区别和联系
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SD系列]SAP SD模块-送达方和售达方的区 ...
- Cocos2d-X网络编程(3) Cocos2d中的网络通信协议——WebSocket协议
WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信.实现浏览器与服务器的即时通讯.即服务器也能主动向客户端发消息. WebSocket代理类和方法: co ...
- 个人推荐的两款vue导出EXCEL插件
个人认为前端VUE项目中导出EXCEL比较好的两种方法,均不是我个人原创,我只是收录简单说明,原创地址在下面. 下面推荐两种方法,个人推荐第一种,第二种不做详细讲解,因为作者已经写过博客了,你们可以点 ...
- 华硕RT-AC86U路由器 AP模式实现多路由器组网,扩展主路由器的无线网范围
描述: 宽带拨号上网的路由器为 TP-LINK TL-WAR1200L,由于室内空间大,遂在此路由器下接入一个 华硕RT-AC86U路由器: 配置使该 华硕路由器与 TP-LINK 路由器的网段相同 ...
- [DS+Algo] 003 一维表结构 Python 代码实现
接上一篇 前言 本篇共 3 个代码实现 严格来说 code1 相当于模仿了 Python 的 list 的部分简单功能 code2 与 code3 简单实现了"循环单链表"与&qu ...