I have a collection which looks like this:
[{
productId: "c69b7701-c33f-4801-99f3-080450f2b6c7",
createdAt: "2021-12-04T17:33:34.221Z",
history: [{
value: 304,
storePrice: 50,
date: 1638639214000,
prevSold: {
price: 303,
createdAt: "2021-12-04T17:32:50.658Z"
}
}, ... 100+ more records]
_id: "61aba66d9085f0044f96a700"
}, ... 100+ more records]
And I’m just calling it with a basic find ie:
const slug = req.params.slug
ProductPrice.find({ productId: slug}).exec((err, data) => {
if (err){
return res.status(400).json({
error: errorHandler(err)
})
}
res.json(data)
})
I need to get the prev sold price into the same level as history.value
ie:
[{
productId: "c69b7701-c33f-4801-99f3-080450f2b6c7",
createdAt: "2021-12-04T17:33:34.221Z",
history: [{
value: 304,
storePrice: 50,
date: 1638639214000,
prevSold: 303
}, ... 100+ more records]
_id: "61aba66d9085f0044f96a700"
}, ... 100+ more records]
So far I’ve tried the following aggregate call but it’s just returning an empty array. Can anyone point me in the right direction please?
ProductPrice.aggregate([
{$match: { productId: slug }},
{$unwind: "$history.prevSold"},
{$addFields: {
"prevSold.value": "$price",
}},
{$replaceRoot: {
newRoot: "$prevSold"
}}
Thanks,