Я новичок MongoDB так, пожалуйста, простите меня, если этот вопрос имеет очевидный ответ ...Matching на соединение _id полей в MongoDB агрегате
Контекст:
Я следовал example in the MongoDB docs к реализовать иерархическую агрегацию с использованием map-reduce. В примере используется «соединение» _id
поля как карта-ключ сокращения производства агрегатных документов, как это ...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z") },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
Это все хорошо. Для моего конкретного случая использования требуется, чтобы значения для несколько одинаковые ключи испускались каждый map
шаг. Например ...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), hobby: "wizardry" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), gender: "male" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
(значения одинаковы, но _id
клавиши немного отличаются.)
Это также хорошо.
Вопрос:
Теперь я хотел бы объединить над моими иерархическими коллекциями (просмотр), в которых содержатся документы, имеющие несколько различных составных _id
полеев, но только по документам с $match
ИНГ _id
поля. Например, я хотел бы объединить только документы, содержащие {u: String, d: Date, hobby: String}
тип _id
или только документы с _id
типа {u: String, d: Date}
.
Я знаю, что я могу использовать оператор $exists
чтобы ограничить _id
поле должно и не должно быть разрешено, но я не хочу, чтобы создать отдельную агрегацию для каждого _id
(потенциально много).
Есть ли простой способ программного ограничения $match
документов, содержащих документы, содержащие (или не содержащие) конкретные поля в совокупности?
Достаточно честный, но что делать, если я _have_ должен соответствовать только на поля '_id'? – jonas
Я не понимаю этого вопроса ... – Derick
В моем случае поля '_id 'не так просты, как я сделал их здесь (например, отличающиеся одним полем). Мой вопрос заключается в том, как '$ match' (потенциально используя оператор' $ exist') на основе полей, присутствующих (и не присутствующих) в поле '_id', без необходимости перечислять все возможные комбинации полей. Итак, при условии шаблона '_id'" я хотел бы агрегировать _just_ над документами, имеющими поле '_id', соответствующее шаблону. – jonas