MongoDB / PyMongo-根据字段的存在过滤文档中的子数组

时间:2019-03-21 16:27:06

标签: python mongodb pymongo

在MongoDB中,我的数据结构如下:

"perfdata" collection:

{ '_id': ObjectId("SomeMongoId"),
  'hostName': 'some-server-name.domain.local',
  'ipAddress': 'some.address.goes.here',
  'perfData': [
       { 'name': 'CPU Usage', 'value': 14 },
       { 'name': 'Memory Usage', 'value': 900, 'remark': 'This is hideously broken' }
  ]
  'dateAdded': '2019-03-21'
}

我使用pymongo,试图编写一个函数来查找集合中与'dateAdded'字段匹配的所有文档,然后过滤其'perfData'子数组仅返回具有'remark'字段的对象。我试过了,但是没有返回任何内容:

    pipeline = [{'$match': {'dateAdded': str(date)}},
        {'$addFields': {'remark': {'$filter': {'input': '$perfData.remark', 'as': 'remark', 'cond': {'$exists': False}}}}}]
    entries = mongo.dbname.perfdata.aggregate(pipeline)

为澄清起见,这是我的预期结果:

{ '_id': ObjectId("SomeMongoId"),
  'hostName': 'some-server-name.domain.local',
  'ipAddress': 'some.address.goes.here',
  'perfData': [
       { 'name': 'CPU Usage', 'value': 14 },
  ]
  'dateAdded': '2019-03-21'
}

我也不知道这是否会自动解决子数组中所有对象都具有'remark'字段的文档,从而忽略整个父文档,或者我是否在聚合中必须自己做?

0 个答案:

没有答案