Есть ли способ объединить 2 коллекции в mongoDB, где ключи, которые не совпадают, добавляются как новые ключи - PullRequest
0 голосов
/ 23 октября 2019

Мне было интересно, если кто-нибудь знает, как я могу добиться желаемого результата.

Если метод, который я использую, неверен, пожалуйста, дайте мне знать, если есть лучший способ сделать это.

У меня есть 2 файла excel со следующими данными: picture of excelфайлы Вывод, который у меня есть, и вывод, который я пытаюсь получить: Изображение выводов

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

Я использовал read-excel-file для извлечения данных и передачи их в базу данных mogoDB. Это модели, которые я использовал:

модель joinA:

let JOINA = new Schema({
Id: {
    type: String
},

joina_key: {
    type: String
},

joina_value1: {
    type: String
},

joina_value2: {
    type: String
}});

модель joinB:

let JOINB = new Schema({
Id: {
    type: String
},

joinb_key: {
    type: String
},

joinb_mult1: {
    type: String
},

joinb_mult2: {
    type: String
}});

Маршрут конечной точки на моем сервере:

bomDataset.route('/joinXXX').get(function (req, res) {   

joinA.aggregate([{
    $lookup: {
        from: "joinbs", // collection name in db
        localField: "joina_key",
        foreignField: "joinb_key",
        as: "arrayData"
    }
}
]).exec(function(err, results) {
    if (err) {
        console.log(err);
    } else {
        res.json(results);
    }
});});

функция стрелки для кнопки «когда» (при нажатии следует установить состояние, которое будет использоваться в таблице):

testingJoin = () => {
axios
  .get('http://localhost:4000/app/joinXXX')
  .then(response => {
    var data = response.data;
    this.setState({join3 : data})
    console.log(this.state.join3);
  })
  .catch(function(error) {
    console.log(error);
  });}

Заголовок таблицы:

<MDBTableHead color="blue-grey lighten-4">
              <th>Key</th>
              <th>Val 1</th>
              <th>Val 2</th>
              <th>Mult 1</th>
              <th>Mult 2</th>
              <th> Final 1</th>
              <th>Final 2</th> 

            </MDBTableHead>

Тело таблицы:

{ 
               join3.map((item,key) => (
              <tr key = {item["joina_key"]} >                                                                                                                       
                <td> {item["joina_key"]} </td>   
                <td> {item["joina_value1"]} </td> 
                <td> {item["joina_value2"]} </td> 

              {item.arrayData.map( data => 
                  <td> {data.joinb_mult1 }</td>
              )}

              {item.arrayData.map( data => 
                  <td> {data.joinb_mult2 }</td>
              )}   

              {item.arrayData.map( data => {

              var final1 = data.joinb_mult1  * item["joina_value1"];
              // console.log({aaa});
              return (
                <td> {final1} </td> 
              )
              }
              )}  

              {item.arrayData.map( data => {

                  var final2 = data.joinb_mult2  * item["joina_value2"];
                  return (
                    <td> {final2} </td> 
                  )
              }
              )}  

              </tr>
               ))
 }

1 Ответ

0 голосов
/ 23 октября 2019

Надеюсь, что кто-то может дать вам более подробное объяснение, но вам нужен поиск, который допускает поведение, аналогичное соединению в SQL.

Посмотрите на следующую ссылку , которая содержитпохожие примеры.

...