I have a dataset like this:
[
{
"_id" : ObjectId("6332c4d8a813124264860f83"),
"prefixStr" : "ABCD",
"startRange" : 1,
"endRange" : 5,
"createdate" : ISODate("2022-09-27T09:39:36.319Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4d8a813124264860f84"),
"prefixStr" : "ABCD",
"startRange" : 1,
"endRange" : 5,
"createdate" : ISODate("2022-09-27T09:39:36.319Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4d8a813124264860f85"),
"prefixStr" : "ABCD",
"startRange" : 1,
"endRange" : 5,
"createdate" : ISODate("2022-09-27T09:39:36.319Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4d8a813124264860f86"),
"prefixStr" : "ABCD",
"startRange" : 1,
"endRange" : 5,
"createdate" : ISODate("2022-09-27T09:39:36.320Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4d8a813124264860f87"),
"prefixStr" : "ABCD",
"startRange" : 1,
"endRange" : 5,
"createdate" : ISODate("2022-09-27T09:39:36.320Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4e1a813124264860f88"),
"prefixStr" : "ABCD",
"startRange" : 11,
"endRange" : 15,
"createdate" : ISODate("2022-09-27T09:39:45.739Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4e1a813124264860f89"),
"prefixStr" : "ABCD",
"startRange" : 11,
"endRange" : 15,
"createdate" : ISODate("2022-09-27T09:39:45.743Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4e1a813124264860f8a"),
"prefixStr" : "ABCD",
"startRange" : 11,
"endRange" : 15,
"createdate" : ISODate("2022-09-27T09:39:45.746Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4e1a813124264860f8b"),
"prefixStr" : "ABCD",
"startRange" : 11,
"endRange" : 15,
"createdate" : ISODate("2022-09-27T09:39:45.747Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4e1a813124264860f8c"),
"prefixStr" : "ABCD",
"startRange" : 11,
"endRange" : 15,
"createdate" : ISODate("2022-09-27T09:39:45.748Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4eaa813124264860f8d"),
"prefixStr" : "ABCD",
"startRange" : 21,
"endRange" : 25,
"createdate" : ISODate("2022-09-27T09:39:54.203Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4eaa813124264860f8e"),
"prefixStr" : "ABCD",
"startRange" : 21,
"endRange" : 25,
"createdate" : ISODate("2022-09-27T09:39:54.204Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4eaa813124264860f8f"),
"prefixStr" : "ABCD",
"startRange" : 21,
"endRange" : 25,
"createdate" : ISODate("2022-09-27T09:39:54.205Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4eaa813124264860f90"),
"prefixStr" : "ABCD",
"startRange" : 21,
"endRange" : 25,
"createdate" : ISODate("2022-09-27T09:39:54.207Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c4eaa813124264860f91"),
"prefixStr" : "ABCD",
"startRange" : 21,
"endRange" : 25,
"createdate" : ISODate("2022-09-27T09:39:54.208Z"),
"__v" : 0
},
{
"_id" : ObjectId("6332c623edb18941f8aeabea"),
"prefixStr" : "ANKT001",
"startRange" : 0,
"endRange" : 0,
"createdate" : ISODate("2022-09-27T09:45:07.570Z"),
"__v" : 0
}
]
Now I want to aggregate the collection so that result will be like this:
Expected results
[
{ _id: 'ANKT001', range: [ {start: 0, end: 0 }]},
{ _id: 'ABCD', range: [ {start: 1, end: 5 }, {start: 11, end: 15 }, {start: 21, end: 25 } }
]
This is my code by which I am getting the result but not as expectation which was mentioned above:
My current query result
[
{ _id: 'ANKT001', startRange: [ 0 ], endRange: [ 0 ] },
{ _id: 'ABCD', startRange: [ 11, 21, 1 ], endRange: [ 5, 15, 25 ] }
]
This is My Query:
const getUsedRanges = await MyCode.aggregate(
[
{
$group: {
_id: "$prefixStr",
startRange: { $addToSet: "$startRange"},
endRange: { $addToSet: "$endRange" },
}
},
{
$project : {
_id: 1,
startRange: 1,
endRange: 1,
}
}
]
).exec();
console.log(getUsedRanges);
if (getUsedRanges) {
let resp = getUsedRanges.map(x => {
return {
prefix: x._id,
startRange: x.startRange.sort((a, b) => {
return a - b;
}),
endRange: x.endRange.sort((a, b) => {
return a - b;
})
}
});
console.log(resp);
}
Can Anyone guide me how to make the query to get the response in array of objects for range array
You have to create range
property and pass start
and end
propeties inside $addToSet
operator,
const getUsedRanges = await MyCode.aggregate(
{
$group: {
_id: "$prefixStr",
range: {
$addToSet: {
start: "$startRange",
end: "$endRange"
}
}
}
}
]).exec();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.