一:  数据结构

{
"_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. Xcode10报错 library not found for -lstdc++ 问题解决

    在Xcode9上正常编译的项目,在Xcode10上编译可能会遇到如下错误: library not found for -lstdc++.6.0.9 library not found for -ls ...

  2. Java中class的声明

    在Java中下面Class的声明哪些是错误的?(A,B,C)   A:public abstract final class Test { abstract void method();} B:pub ...

  3. 解决samlexception-inresponsetofield-of-the-response-doesnt-correspond-to-sent-mess

    sp在校验samlresponse 根据id在session中的samlrequestid 取出,两者进行对比,这里如果做idp-init的话 可以注释掉. 1第一种方法 WebSSOProfileC ...

  4. redis 管理工具

    1.redis studio 2.redis desktop manager

  5. robotframework(rf)中对时间操作的datetime库常用关键字

    1.对固定日期进行操作,增加或减去单位时间或者时间段 2.对两个时间段进行操作 3.对时间格式转化,获取时间戳. 4.从完整时间中取指定年月日等 5.对时间类型进行格式化 6.获取当前时间或者指定时区 ...

  6. 【Java基础】内部类

    非静态内部类不能拥有静态变量 为什么 下面这段代码,如果Lazyholder没有static修饰,则编译不过 class Singleton2 { private static class LazyH ...

  7. 远程桌面 使用 本地输入法(虚拟化 终端 远程接入 RemoteApp)

    远程桌面连接组件是微软从Windows 2000 Server开始提供的,该组件一经推出便受到了很多用户的拥护和使用.   在WINDOWS XP和WINDOWS SERVER 2003中微软公司将该 ...

  8. python string_1

    quote :http://www.runoob.com/python/python-strings.html #coding:utf-8 s1="http://www.jnshu.com/ ...

  9. LeetCode.867-转置矩阵(Transpose Matrix)

    这是悦乐书的第332次更新,第356篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第202题(顺位题号是867).给定矩阵A,返回A的转置. 矩阵的转置是在其主对角线上翻转 ...

  10. android开发错误经验总结

    TextView: 1.textView.setText();参数如果直接传int类型,ide不会显示错误.但是运行会报错. 布局渲染: 1. <View android:background= ...