Использование фильтров массивов в операции обновления:
db.getCollection("collectionName").findOneAndUpdate(
{ _id: "111" }, // Querying against `_id`, need to convert string to `ObjectId()` or instead use `.findByIdAndUpdate()`
{ $inc: { "products.$[p].nums.$[n].quantity": 1 } },
{
arrayFilters: [{ "p._id": "pqr" }, { "n._id": "aaa" }] // Inputs here
}
// Use { new : true } Option in mongoose to return updated document
);
Ввод do c:
{
"_id" : "111",
"products" : [
{
"_id" : "pqr",
"nums" : [
{
"_id" : "aaa",
"quantity" : 50
},
{
"_id" : "bbb",
"quantity" : 50
}
]
},
{
"_id" : "abc",
"nums" : [
{
"_id" : "aaa1",
"quantity" : 501
},
{
"_id" : "bbb1",
"quantity" : 501
}
]
}
]
}
Вывод do c:
{
"_id" : "111",
"products" : [
{
"_id" : "pqr",
"nums" : [
{
"_id" : "aaa",
"quantity" : 51 // This got incremented
},
{
"_id" : "bbb",
"quantity" : 50
}
]
},
{
"_id" : "abc",
"nums" : [
{
"_id" : "aaa1",
"quantity" : 501
},
{
"_id" : "bbb1",
"quantity" : 501
}
]
}
]
}
Ссылка: mon goose .findByIdAndUpdate ()