0

I used $unwind operator, it is a stage in the MongoDB aggregation pipeline that is used to deconstruct an array field into multiple documents, each representing a single array element. The $unwind operator takes an array field as input and outputs one document for each element in the array. Statistics.Platforms , Statistics.Weapons , Variables , Measurements from my data in mongodb are array type. Here is my Server.js ;

  app.get('/:collectionName', async (req, res) => {
  try {
    const collectionName = req.params.collectionName;
    const collection = mongoose.connection.collection(collectionName);

    const pipeline = [
      { $unwind: '$Run' }, 
      { $unwind: '$Statistics.Platforms' },
      { $unwind: '$Statistics.Weapons' }, 
      { $unwind: '$Variables' },
      { $unwind: '$Measurements' },
      {
        $project: {
          
          _id: 1,
          'Run.Date': 1,
          'Run.Index': 1,
          'Run.Scenario.Name': 1,
          'Run.Scenario.Database': 1,
          'Run.Svn.Address': 1,
          'Run.Svn.Revision': 1,
          'Statistics.Platforms.Profile': 1,
          'Statistics.Platforms.Type': 1,
          'Statistics.Platforms.Force': 1,
          'Statistics.Platforms.Total': 1,
          'Statistics.Platforms.Wrecked': 1,
          'Statistics.Platforms.Destroyed': 1,
          'Statistics.Weapons.Profile': 1,
          'Statistics.Weapons.Type': 1,
          'Statistics.Weapons.Force': 1,
          'Statistics.Weapons.Total': 1,
          'Statistics.Weapons.Hit': 1,
          'Statistics.Weapons.Missed': 1,
          'Variables.Type': 1,
          'Variables.Configuation': 1,
          'Variables.Vaue': 1,
          'Measurements.Type': 1,
          'Measurements.Configuration': 1,
          'Measurements.Value': 1,
        },
      },
    ];
    const data = await collection.aggregate(pipeline).toArray();

    res.json(data);
  } catch (err) {
    console.error(err);
    res.status(500).send('Server error');
  }
}); 

When I use the unwind operator, I created more than one object with the same id. I want to combine those with the same id. How can I do it.

EDIT: React side ;

  const Jforce_DataSource = {
    Name: 'Jforce',
    ConnectionProperties: {
      DataProvider: 'JSON',
      ConnectString: 'endpoint=http://localhost:3001/',
    },
  };



  const dataSources = [
    {
      id: 'Jforce',
      title: 'Jforce',
      template: Jforce_DataSource,
      canEdit: false,
      datasets: collections.map((collection) => {
        
        return {
          id: collection,
          title: collection,
          template: {
            Name: collection,
            Query: { DataSourceName: 'Jforce', CommandText: `uri=/${collection};jpath=$.[*]` },
            Fields: [
              { Name: '_id', DataField: '_id' },
              { Name: 'Date', DataField: 'Run.Date' },
              { Name: 'Index', DataField: 'Run.Index' },
              { Name: 'ScenarioName', DataField: 'Run.Scenario.Name' },
              { Name: 'ScenarioDatabase', DataField: 'Run.Scenario.Database' },
              { Name: 'SvnAddress', DataField: 'Run.Svn.Address' },
              { Name: 'SvnRevision', DataField: 'Run.Svn.Revision' },

              { Name: 'PlatformProfile', DataField: 'Platforms.Profile' },
              { Name: 'PlatformType', DataField: 'Statistics.Platforms.Type' },
              { Name: 'PlatformForce', DataField: 'Statistics.Platforms.Force' },
              { Name: 'PlatformTotal', DataField: 'Statistics.Platforms.Total' },
              { Name: 'PlatformWrecked', DataField: 'Statistics.Platforms.Wrecked' },
              { Name: 'PlatformDestroyed', DataField: 'Statistics.Platforms.Destroyed' },
              { Name: 'WeaponProfile', DataField: 'Statistics.Weapons.Profile' },
              { Name: 'WeaponType', DataField: 'Statistics.Weapons.Type' },
              { Name: 'WeaponForce', DataField: 'Statistics.Weapons.Force' },
              { Name: 'WeaponTotal', DataField: 'Statistics.Weapons.Total' },
              { Name: 'WeaponHit', DataField: 'Statistics.Weapons.Hit' },
              { Name: 'WeaponMissed', DataField: 'Statistics.Weapons.Missed' },

              { Name: 'VariableType', DataField: 'Variables.Type' },
              { Name: 'VariableConfiguration', DataField: 'Variables.Configuration' },
              { Name: 'VariableValue', DataField: 'Variables.Vaue' },

              { Name: 'MeasurementType', DataField: 'Measurements.Type' },
              { Name: 'MeasurementConfiguration', DataField: 'Measurements.Configuration' },
              { Name: 'MeasurementValue', DataField: 'Measurements.Value' },  

              
            ],
          },
          canEdit: true,
        };
      }),
    },
  ];

I want to be able to view my nested arrays in my database in activereportsjs designer. Only when I unwind, I can view my array data. Thats why I want to combine with the same id.

user
  • 1
  • 3

0 Answers0