Может ли mongo агрегировать данные $push из другого запроса?

#node.js #mongodb #mongoose

Вопрос:

Это трудно описать, я использую mongodb и метод агрегирования, чтобы получить группу данных списка по 2 полям. Но в некоторых записях есть только 1 в этих 2 полях, и я также хочу включить записи в список.

Пример:

 // Aggregate query:

db.collectionA.aggregate([{
  $group: {
    _id: {
      field1: '$field1',
      field2: '$field2'
    },
    $push: {
      value: '$value'
    }
  }
}]);

// Above query result look like
results = [{
  _id: { field1: '1', field2: '2', value: [1, 2, 3] },
}]


// I have to push all record have only one field1 = 1 or field2 = 2 to value
results.forEach((result) => {
  const moreData = db.collectionA.find({
    $or: [{ field1: result._id.field1 }, { field2: result._id.field2 }]
  });

  result.value.push(moreData);
})

 

Я ожидаю, что мы сможем обработать последний раздел в той же совокупности запросов. Может ли mongo $подтолкнуть значение результата запроса

 db.collectionA.aggregate([{
  $group: {
    _id: {
      field1: '$field1',
      field2: '$field2'
    },
    value: {
      db.collectionA.find({ $or: [{ field1: '$_id.field1', field2: '$_id.field2' }]})
    }
  }
}])

 

Комментарии:

1. не могли бы вы предоставить примеры данных

2. Вы можете использовать $lookup для поиска этих документов