一:  数据结构

{
"_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数据库的查操作的更多相关文章

  1. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  2. Python操作Mongo数据库

    连接数据库 import pymongo # 连接到数据库,以下两种方式均可 client = pymongo.MongoClient(host='localhost', port=27017) cl ...

  3. 使用Mongo官方驱动操作Mongo数据库

    首先到 https://github.com/mongodb/mongo-csharp-driver/downloads 下载Mongo官方驱动 下载完成后引用到项目中 public class Co ...

  4. mongo数据库的常见操作

    连接mongodb数据库的命令查看对应数据库mongo.exeuse shujukuming;db.opportunity.findOne({"id":5}); db.opport ...

  5. flask操作(增删改查操作)

    增加数据 from .models import Goods from app.extensions import db goods1 = Goods(name='魅族18s', price=3400 ...

  6. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  7. 一些常用的操作MySQL数据库的sql语句

    创建数据库:create database 数据库名; 删除数据库:drop datebase 数据库名; 查看数据库:show databases;(所有数据库) 使用数据库:use 数据库名;(之 ...

  8. lucene索引库的增删改查操作

    1. 索引库的操作 保持数据库与索引库的同步 说明:在一个系统中,如果索引功能存在,那么数据库和索引库应该是同时存在的.这个时候需要保证索引库的数据和数据库中的数据保持一致性.可以在对数据库进行增.删 ...

  9. koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

随机推荐

  1. 九、SpringBoot集成Thymeleaf模板引擎

    Thymeleaf咋读!??? 呵呵,是不是一脸懵逼...哥用我的大学四级英文知识告诉你吧:[θaimlif]. 啥玩意?不会音标?...那你就这样叫它吧:“赛母李府”,大部分中国人是听不出破绽的.. ...

  2. Delphi XE2 之 FireMonkey 入门(34) - 控件基础: TFmxObject: 克隆对象

    Delphi XE2 之 FireMonkey 入门(34) - 控件基础: TFmxObject: 克隆对象 有两个和克隆相关的方法: Clone().CloneChildFromStream(). ...

  3. Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库

    Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1    : TDataSource; Clie ...

  4. django F和Q 关键字使用

    F 的使用: 想给表里每个价格加上一百就要用上F,直接加是不行的.

  5. 蚁群算法解决TSP问题

    代码实现 运行结果及参数展示 alpha=1beta=5 rho=0.1  alpha=1beta=1rho=0.1 alpha=0.5beta=1rho=0.1 概念蚁群算法(AG)是一种模拟蚂蚁觅 ...

  6. centos的DNS服务工作流程及搭建

    1  什么是DNS? DNS(Domain Name Server,域名服务器)即域名解析服务,是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器.DNS ...

  7. nginx知识问答

    1.请解释一下什么是Nginx? 答:Nginx是一个web服务器和反向代理服务器,用于HTTP.HTTPS.SMTP.POP3和IMAP协议.2.请列举Nginx的一些特性? 答:Nginx服务器的 ...

  8. 小白学Python——用 百度AI 实现 OCR 文字识别

    百度AI功能还是很强大的,百度AI开放平台真的是测试接口的天堂,免费接口很多,当然有量的限制,但个人使用是完全够用的,什么人脸识别.MQTT服务器.语音识别等等,应有尽有. 看看OCR识别免费的量 快 ...

  9. Delphi XE2_XE3 Update

    Delphi 和 C++Builder XE2 更新摘要 XE2的关键特性如下: 1. FireMonkey Application Platform支持运行在Windows (32和64位),Mac ...

  10. 计算机系统结构总结_Multiprocessor & cache coherence

    Textbook:<计算机组成与设计——硬件/软件接口>  HI<计算机体系结构——量化研究方法>          QR 最后一节来看看如何实现parallelism 在多处 ...