findOne с помощью $ push создает дубликаты объектов - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу обновить объект в коллекции, которая имеет массив объектов.Проблема в том, что мой код создает дубликаты объектов в массиве.

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 голос
/ 17 апреля 2019

Можно попробовать с $addToSet вместо $push.

$ addToSet - Добавить только уникальные предметы, но порядок предметов не гарантируется.

$ push - Вы можете добавлять одни и те же элементы несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...