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.