У меня есть кластер на атласе. Мой текущий объект выглядит следующим образом:
{
"_id": {
"$oid":"5e9d8ccfb3d80e3824bf856c"
},
"user": {
"name":"test",
"channelGroups": [
{
"active": true,
"name": "an example of test",
"creationDate": "20 Apr 2020 at 13:35 PM",
"summary": "an example summary",
"channels": []
}
]
},
"__v": {
"$numberInt":"0"
}
}
Вот мой метод контроллера: (я использую mon goose с express)
createANewChannel: (req, res) => {
channelGroupModel.findOneAndUpdate({
"user.name": "test", "user.channelGroups": {
$elemMatch: {
"name": "an example of test" // req.params.slug
}
}
}, { $push: {
"channelGroups.channels": {
filter: {
keyword: "#example",
keywordType: "hashtag",
active: true,
fetchFrequency: 1,
},
tweets: []
}
}
},
(error, success) => {
if (error) {
console.log(error);
} else {
console.log(success);
}
}
);
res.send('ok');
},
Проблема : Я хочу добавить sh новый объект канала в массив channelGroups в соответствии со значением имени channelGroups. Мой код работает, но ничего не происходит.
==================================== ================================
Обновленная рабочая версия :
channelGroupModel.findOneAndUpdate(
{
"user.name": "test"
},
{
$push: {
"user.channelGroups.$[elem].channels": {
filter: {
keyword: "#example",
keywordType: "hashtag",
active: true,
fetchFrequency: 1,
},
tweets: []
}
}
},
{
arrayFilters: [{"elem.name": "an example of test"}]
},
(error, success) => {
if (error) {
console.log(error);
} else {
console.log(success);
}
}
)