python - 如何从以下 mongo 对象中过滤掉数据库
问题描述
我有一个数据库,其中列出的对象如下
{'documents': [{'tags': ['Procedures', 'Cardiac', 'ECG', None],
'_id': ObjectId('5cf602f74beb6e2a391b7d95'),
'key': 'images/333213095:2019-06-04T05:34:46.862Z.jpg',
'reportedAt': datetime.datetime(2019, 6, 4, 4, 30),
'updatedAt': datetime.datetime(2019, 6, 4, 5, 34, 47, 907000),
'createdAt': datetime.datetime(2019, 6, 4, 5, 34, 47, 907000)},
{'tags': ['Documents', 'Admission notes', None, None],
'_id': ObjectId('5cf60fa84beb6e46bc1b7dcc'),
'key': 'images/2851467532:2019-06-04T06:28:55.398Z.jpg',
'reportedAt': datetime.datetime(2019, 6, 4, 4, 30),
'updatedAt': datetime.datetime(2019, 6, 4, 6, 28, 56, 34000),
'createdAt': datetime.datetime(2019, 6, 4, 6, 28, 56, 34000)},
{'tags': ['Documents', 'Admission notes', None, None],
'_id': ObjectId('5cf60fb74beb6eac251b7dcf'),
'key': 'images/3976429268:2019-06-04T06:29:11.269Z.jpg',
'reportedAt': datetime.datetime(2019, 6, 4, 4, 30),
'updatedAt': datetime.datetime(2019, 6, 4, 6, 29, 11, 724000),
'createdAt': datetime.datetime(2019, 6, 4, 6, 29, 11, 724000)},
{'tags': ['Documents', 'Admission notes', None, None],
'_id': ObjectId('5cf60fd44beb6e27081b7dd2'),
'key': 'images/1426882813:2019-06-04T06:29:40.078Z.jpg',
'reportedAt': datetime.datetime(2019, 6, 4, 4, 30),
'updatedAt': datetime.datetime(2019, 6, 4, 6, 29, 40, 447000),
'createdAt': datetime.datetime(2019, 6, 4, 6, 29, 40, 447000)},
{'tags': ['Blood', 'Hematology', 'CBC', None],
'_id': ObjectId('5cf6add44beb6e1c001b99fb'),
'key': '',
'attributes': {'Hb': '12.8',
'Platelet': '106000',
'MCV': '92.6',
'Neutrophils': '82',
'Eosinophil': '02',
'Lymphocytes': '13',
'Atypical': '00',
'Total count': '10330',
'Basophils': '00'},
'reportedAt': datetime.datetime(2019, 6, 4, 17, 43, 35, 960000),
'updatedAt': datetime.datetime(2019, 6, 4, 17, 43, 48, 306000),
'createdAt': datetime.datetime(2019, 6, 4, 17, 43, 48, 306000)}
我需要过滤掉所有有标签的记录
'tags': ['Blood', 'Hematology', 'CBC', None]
我尝试了以下代码
list(db2.patients.find({'CPMRN':mrn1, 'documents.tags':['Blood', 'Hematology', 'CBC', None]}, {('documents'):1, '_id':0}))
但它不起作用(没有显示错误,但过滤后的结果不是我想要的)。
当我尝试这个
list(db2.patients.find({'CPMRN':mrn1, 'documents.tags':'[Blood, Hematology, CBC, None]'}, {('documents'):1, '_id':0}))
结果是一个空列表
当查询是字符串列表时,我应该如何措辞?
非常感谢
解决方案
我认为问题在于您的项目在查找查询中。
您将“文档”包装在括号中()
,但您应该不带括号传递它。
尝试这个 :
db2.patients.find({
'CPMRN':mrn1,
'documents.tags':['Blood', 'Hematology', 'CBC', None]
}, {
'documents':1,
'_id':0
})
您也可以尝试使用$all:
db2.patients.find({
'CPMRN':mrn1,
'documents.tags':{$all : ['Blood', 'Hematology', 'CBC', None]}
}, {
'documents':1,
'_id':0
})
推荐阅读
- java - 如何添加两个包含十六进制数字的字符串而不将它们转换为 int?
- c# - C#计数并列出另一个方法的字典对
- swift - 如何在 UITextView 中动态加载图像
- angular - Ionic4 Firebase 加载数据时间过长
- java - 无法使用 API 客户端库 (Java) 启动数据流模板,因为我收到无效参数异常
- angular - 如果项目不是使用 Angular-CLI 创建的,则添加 Polyfill 支持
- python - 使用矩阵切片使循环更有效
- asp.net - IIS 上的某些请求会挂起几分钟并以丢失的连接结束
- javascript - 如何在 vue.js 中创建多维 v-model 作为名称属性
- python - 清除值 JSON