MongoDB: как я могу получить случайное значение поля из документов, которые сгруппированы по указанному c полю, и у каждой группы есть результат - PullRequest
0 голосов
/ 04 февраля 2020

У меня много документов, таких как:

[
    {'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 и время отклика

...