#mongodb #express #mongoose
#mongodb #экспресс #мангуст
Вопрос:
Я хочу обновить объект в коллекции, который содержит массив объектов. Проблема в том, что мой код создает повторяющиеся объекты в массиве.
exports.add_collection = (req, res) => {
let coll = {collName: req.body.collName, collApps: []}
console.log(coll)
User.updateOne({_id: req.userId}, { $push: {collections: coll} },
//seems like $push pushes twice?!
(err) => {
if(err){
console.log("Error: ", err)
}
})
.then(result => {
res.status(200).json({
message: "collection added",
collection: coll
})
})
}
в MongoDB у меня есть что-то вроде этого
//some elements of the documents
"collections": [
{
"_id": {
"$oid": "5c8ed..."
},
"collName": "Social Media",
"collApps": []
},
{
"_id": {
"$oid": "5c8ed..."
},
"collName": "Social Media",
"collApps": []
},
//other elements of the documents
Комментарии:
1. Похоже, у вас есть ответ на то, как обойти эту проблему, но мы до сих пор не знаем, откуда вообще возникла проблема. Если бы мне пришлось угадывать, я бы поспорил, что на самом деле существует несколько запросов, попадающих в эту конечную точку, и что ваша проблема на самом деле заключается в выяснении, почему ваши запросы являются дубликатами.
Ответ №1:
Можете ли вы попробовать $addToSet
вместо $push
.
$addToSet — добавляет только уникальные элементы, но порядок элементов не гарантируется.
$push — вы можете добавлять одни и те же элементы несколько раз.