In my code, I perform a findOneAndUpdate but instead of changing the found $ item in the array, it only updates the first element. When the same query is done with findOne (printing out the $ item), I get the valid item that should be changed. My issue seems to be related with Positional operator issue but it persists even after I replace $in with $elemmatch or remove it all together (itemUsers: user._id)
Schemas: https://pastebin.com/JESPgSVe
findOneAndUpdate (updates the first array element instead of the queried on)
findOneAndUpdate(
{
itemId,
itemUsers: { $in: user._id },
reviews: {
$elemMatch: {
reviewId,
reviewer: user._id,
$or: [
{ createdAt: { $lte: Date.now() } },
{ createdAt: undefined },
],
},
},
},
{ "reviews.$.createdAt": new Date() }
)
)
findOne (returns the specified query)
findOne(
{
itemId,
itemUsers: { $in: user._id },
reviews: {
$elemMatch: {
reviewId,
reviewer: user._id,
$or: [
{ createdAt: { $lte: Date.now() } },
{ createdAt: undefined },
],
},
},
},
"reviews.$"
)
)