一: 数据结构
{ "_id" : ObjectId("5de8a5b748a75a8d48b72bdc"), "farm_id" : "2", "user_id" : "2", "equipment_number" : "2", "hybridization_detail" : [ { "hybridization_time" : "2019-11-11", "pregnancy _time" : "2019-12-4", "hybridization_type" : "冻精", "object_type" : "奶牛", "sperm_count" : "100", "sperm_number" : "1", "hybridization_control" : "性控", "id" : "15755278639220782" }, { "hybridization_time" : "2019-11-11", "pregnancy _time" : "2019-12-4", "hybridization_type" : "冻精", "object_type" : "奶牛", "sperm_count" : "100", "sperm_number" : "1", "hybridization_control" : "性控", "id" : "15755278639220783" } ] }
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":"2"}) return ret m = Mongodb_Wrapper() ret = m.find_one() print(ret) print(type(ret)) # 结果 {‘_id‘: ObjectId(‘5de8a5b748a75a8d48b72bdc‘), ‘farm_id‘: ‘2‘, ‘user_id‘: ‘2‘, ‘equipment_number‘: ‘2‘, ‘hybridization_detail‘: [{‘hybridization_time‘: ‘2019-11-11‘, ‘pregnancy _time‘: ‘2019-12-4‘, ‘hybridization_type‘: ‘冻精‘, ‘object_type‘: ‘奶牛‘, ‘sperm_count‘: ‘100‘, ‘sperm_number‘: ‘1‘, ‘hybridization_control‘: ‘性控‘, ‘id‘: ‘15755278639220782‘}, {‘hybridization_time‘: ‘2019-11-11‘, ‘pregnancy _time‘: ‘2019-12-4‘, ‘hybridization_type‘: ‘冻精‘, ‘object_type‘: ‘奶牛‘, ‘sperm_count‘: ‘100‘, ‘sperm_number‘: ‘1‘, ‘hybridization_control‘: ‘性控‘, ‘id‘: ‘15755278639220783‘}]} <class ‘dict‘>
不想显示_id和farm_id怎么办?可以增加第二个参数,过滤条件
def find_one(self): ret = self.db.find_one({"farm_id":"2"},{"_id":0,"farm_id":0}) return ret 结果: {‘user_id‘: ‘2‘, ‘equipment_number‘: ‘2‘, ‘hybridization_detail‘: [{‘hybridization_time‘: ‘2019-11-11‘, ‘pregnancy _time‘: ‘2019-12-4‘, ‘hybridization_type‘: ‘冻精‘, ‘object_type‘: ‘奶牛‘, ‘sperm_count‘: ‘100‘, ‘sperm_number‘: ‘1‘, ‘hybridization_control‘: ‘性控‘, ‘id‘: ‘15755278639220782‘}, {‘hybridization_time‘: ‘2019-11-11‘, ‘pregnancy _time‘: ‘2019-12-4‘, ‘hybridization_type‘: ‘冻精‘, ‘object_type‘: ‘奶牛‘, ‘sperm_count‘: ‘100‘, ‘sperm_number‘: ‘1‘, ‘hybridization_control‘: ‘性控‘, ‘id‘: ‘15755278639220783‘}]} <class ‘dict‘>
只想显示 "id" : "15755278639220782"的这条数据怎么办,通过限制 hybridization_detail的值进行查询,$elemMatch进行操作
情况一:唯一值字段 id
def find_one(self): ret = self.db.find_one({"hybridization_detail.id":"15755278639220782"},{"hybridization_detail":{"$elemMatch":{"id":"15755278639220782"}}}) return ret # 结果 {‘_id‘: ObjectId(‘5de8a5b748a75a8d48b72bdc‘), ‘hybridization_detail‘: [{‘hybridization_time‘: ‘2019-11-11‘, ‘pregnancy _time‘: ‘2019-12-4‘, ‘hybridization_type‘: ‘冻精‘, ‘object_type‘: ‘奶牛‘, ‘sperm_count‘: ‘100‘, ‘sperm_number‘: ‘1‘, ‘hybridization_control‘: ‘性控‘, ‘id‘: ‘15755278639220782‘}]} <class ‘dict‘>
情况二:不唯一值字段 id以外的所有字段
原文:https://www.cnblogs.com/meloncodezhang/p/12013515.html