首页 > 解决方案 > 如何从以下 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}))

结果是一个空列表

当查询是字符串列表时,我应该如何措辞?

非常感谢

标签: pythonmongodb

解决方案


我认为问题在于您的项目在查找查询中。

您将“文档”包装在括号中(),但您应该不带括号传递它。

尝试这个 :

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
})

推荐阅读