一:  数据结构

{
"_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. 如何选择EDM电子邮件服务提供商

    选择一家好的EDM电子邮件服务商非常重要,因为这可以让我们的EDM营销事半功倍,同时可以达到更好的营销效果.下面博主为大家介绍一下选择标准. 一.服务好不好. 这点很重要,当然这里的服务包括售前和售后 ...

  2. EDM邮件营销的七个重要参考指标

    如何做好EDM邮件营销,已经成为EDM工作人员面临的实际问题.当你发送邮件之前, 你可以先想想:我自己的电子邮件的目标是什么?邮件能否吸引收件人?能带来更多客户吗?无论你的目标是什么,以下的这些指标是 ...

  3. 自定义配置节点configSections的使用

    //App.config <?xml version="1.0" encoding="utf-8" ?><configuration>  ...

  4. drop() delete() remove()函数

    drop()函数 1 删除前务必指定columns或index,避免出错. import pandas as pd df = pd.DataFrame({'a':[1,2,3], 'b':[3,4,5 ...

  5. 中国MOOC_零基础学Java语言_第4周 循环控制

    4.1 for循环 Tips for loops 如果有固定次数,用for 如果必须执行一次,用do_while 其他情况用while 4.2 循环控制 break和continue 在循环前可以放一 ...

  6. 【MyBatis】-----【MyBatis】---表级联系【一对多】

    一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...

  7. 【算法与数据结构】二叉堆和优先队列 Priority Queue

    优先队列的特点 普通队列遵守先进先出(FIFO)的规则,而优先队列虽然也叫队列,规则有所不同: 最大优先队列:优先级最高的元素先出队 最小优先队列:优先级最低的元素先出队 优先队列可以用下面几种数据结 ...

  8. Hive-java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe

    Task with the most failures(): ----- Task ID: task_1555476136794_8201_m_000000 URL: http://hadoop1:8 ...

  9. POJ 3743 LL’s cake(圆+PSLG)

    题意是给你一块在原点半径为10的圆,然后告诉你一条直线在圆弧上的极角,相当于用这条直线把这个圆分成两半,然后一共是n条直线切圆,就好比切蛋糕,问你其中最大一块的面积是多少. 如果我们将圆弧转化成直线边 ...

  10. Python 入门之 模块

    Python 入门之 模块 1.模块 (1)模块是什么? ​ 将一些常用的功能封装到一个文件中,那么这个存储着很多常用的功能的py文件,就是模块. 模块就是文件,存放一堆常用的函数.模块,就是一些常用 ...