В 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' подмассивы для возврата только тех объектов, которые не имеют поле 'примечание' . Я попробовал это, но ничего не получилось:
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'
}
Я также не знаю, будет ли это автоматически учитывать документы, в которых все объекты в подмассиве имеют поле 'примечание' и, таким образом, пропускает весь родительский документ, или если я ' Придется ли это делать самому в агрегации?