我希望为一个耗时的查询创建一个按需物化视图,因为表可能一直包含2- 4 M个条目。
我目前掌握的情况是:
events.history.aggregate([
{"$match":{"sevr":{"$ne":"NO_ALARM"}}},
{"$group": {"_id": ["$name", "$sevr"], "count": {"$sum": 1}}},
{"$sort": SON([("count", -1), ("_id", -1)])},
])
它给出了以下输出格式:
[
{'_id': ["name_1", "SEVR_1"], 'count': <count>},
{'_id': ["name_1", "SEVR_2"], 'count': <count>},
{'_id': ["name_2", "SEVR_1"], 'count': <count>},
{'_id': ["name_2", "SEVR_2"], 'count': <count>},
...
]
但是如果我试图将其合并到一个物化视图中,显然会失败,因为_id是一个列表。
[
{'_id': "name_1", 'count': {"SEVR_1":<count>, "SEVR_2":<count>}},
{'_id': "name_2", 'count': {"SEVR_1":<count>, "SEVR_2":<count>}},
...
]
目前,我所能想到的就是运行查询,修改结果以适应所需的输出,然后手动更新物化视图,这与目的不符。
我只是有查询错误,可以让它在一个很好的在线工作?
除非有一种使用vanilla mongodb/pymongo的方法可以自动检测更改(无需副本)
1条答案
按热度按时间z9smfwbn1#
使用任何数据作为字段名都会带来额外的复杂性,但并非无法克服。
如果我没理解错的话,你可以这么做。
在mongoplayground.net上试试。