一:  数据结构

{
"_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. Git-Runoob:Git 创建仓库

    ylbtech-Git-Runoob:Git 创建仓库 1.返回顶部 1. Git 创建仓库 本章节我们将为大家介绍如何创建一个 Git 仓库. 你可以使用一个已经存在的目录作为Git仓库. git ...

  2. 类Enum

    int compareTo(E o) 比较此枚举与指定对象的顺序. String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明. int ordinal() 返回枚举常量的序数(它在 ...

  3. CentOS 6.5 编译安装Apache2.4

    一. httpd 2.4的新特 1) MPM支持运行时装载 --enable-mpms-shared=all --with-mpm=prefork|worker|event2) 支持event MPM ...

  4. 6.824 Lab 2: Raft 2C

    Part 2C Do a git pull to get the latest lab software. If a Raft-based server reboots it should resum ...

  5. CentOS7编译安装sshpass过程

    环境说明:centos 7 cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 我的sshpass版本 sshpass-1.06. ...

  6. SpringBoot 使用 RestTemplate 调用exchange方法 显示错误信息

    SpringBoot使用RestTempate SpringBoot使用RestTemplate摘要认证 SpringBoot使用RestTemplate基础认证 SpringBoot使用RestTe ...

  7. Mac-peizhi

    ##1-JMeter4export JMETER_HOME=/Users/wulei/softwares/installedsoftwares/apache-jmeter-4.0export CLAS ...

  8. RBAC----基于角色的访问权限控制

    RBAC是什么? 基于角色的权限访问控制(Role-Based Access Control) 作为传统访问控制(自主访问.强制访问)的有前景的代替 受到了广泛的关注. 在RBAC中,权限与角色相关联 ...

  9. arm初识

    一.CPU从指令集角度分类 1.1. CISC  (X86) 1.1. 1. CISC CPU 指complex instruction set computer复杂指令集CPU 1.1.2. CIS ...

  10. c++ Oracle OCCI 编程

    转载备忘:http://blog.sina.com.cn/s/blog_53a72add01015zj4.html 关于occi编程可以参考的链接: http://blog.itpub.net/162 ...