MongoDB Aggregate $ unwind для вложенных документов - PullRequest
1 голос
/ 07 мая 2020

У меня возникают проблемы, когда я разматываю более одного поля из суб-документа.

Вот как выглядят данные: -

{
   resp: {
      field1: 'yes',
      field2: ''
},
{
   resp: {
      field1: 'yes',
      field2: ''
}

etc,etc...

Если я обрабатываю конвейер агрегирования для ОДНОГО поля он работает нормально, так что это работает ...

{ $unwind: "$resp" },
{ $unwind: "$resp.field1" },
{ $project: { field1: "$resp.field1" } }
{ $group: {
     _id: 1,
     field1: { $sum: { $cond: [{ $eq: ["$field1","yes"] },1,0] } } 
   }
}

Но если я теперь хочу вернуть поле 2 в той же агрегации, используя следующее, оно вернет счетчик нуля для обоих поля, тогда как ранее field1 имело счет> ноль.

{ $unwind: "$resp" },
{ $unwind: "$resp.field1" },
{ $unwind: "$resp.field2" },
{ 
 $project: { 
     field1: "$resp.field1",
     field2: "$resp.field2" 
}, 
{ $group: {
     _id: 1,
     field1: { $sum: { $cond: [{ $eq: ["$field1","yes"] },1,0] } },
     field2: { $sum: { $cond: [{ $eq: ["$field2","yes"] },1,0] } }
   }
}

Любые предложения были бы очень признательны.

1 Ответ

0 голосов
/ 07 мая 2020

кажется, что это правильный способ сделать это, но я с радостью приму альтернативные предложения. Ошибка заключалась в сопоставлении полей на этапе $ project. При вводе проблемы в SO я понял, где проблема!

...