Найдите с помощью $ push создание дубликатов объектов

#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 — вы можете добавлять одни и те же элементы несколько раз.