У меня много документов, таких как:
[
{'x':'B1','y':'2','filename':'a.txt'},
{'x':'B1','y':'2','filename':'b.txt'},
{'x':'B1','y':'2','filename':'c.txt'},
{'x':'B2','y':'3','filename':'d.txt'},
{'x':'B2','y':'3','filename':'e.txt'},
{'x':'B2','y':'3','filename':'f.txt'},
{'x':'B3','y':'1','filename':'g.txt'},
{'x':'B3','y':'1','filename':'h.txt'},
{'x':'B3','y':'1','filename':'i.txt'}
....
]
имя файла имеет уникальное значение, но x или y не
Я хочу использовать x и y для группировки всех документов и просто получить случайное имя файла
(например, каждая группа получает только два имени файла), результат выглядит так:
[
{'XY':{'x':'B1','y':'2'}, 'matchfile':['a.txt','c.txt']},
{'XY':{'x':'B2','y':'3'}, 'matchfile':['e.txt','f.txt']},
{'XY':{'x':'B3','y':'1'}, 'matchfile':['g.txt','h.txt']}
]
Мой запрос просто извлекает все имена файлов в каждой группе:
db.getCollection('mycollection').aggregate([
{'$group':{'_id':{'x':'$x','y':'$y'},'matchfile':{$addToSet:'$fileName'}}},
{'$project':{'XY':'$_id','matchfile':1}},
....I don't know how to do next step
])
$sample
похоже, в этом случае не работает ...
Я просто хочу использовать один или несколько запросов, потому что могут быть тысячи имен файлов и десятки групп xy. А моя база данных построена в облаке.
Мне нужно уменьшить сетевой трафик c и время отклика