Как мне объединить существующий уникальный идентификатор в MongoDB с NodeJS? - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу суммировать поле документов, когда вставляю новую запись с повторяющимся уникальным идентификатором. Это то, что я до сих пор:

MongoClient.connect(process.env.MONGODB_URI || process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
            if (err) throw err;
            const dbo = db.db("mydb");
            const messageTable = dbo.collection("comments");
            for(var key in words){
                let myobj = 
                [{ 
                    _id: key,
                    frequency: words[key]
                }];
                messageTable.insertMany(myobj, function(err, res){
                    if (err) throw err;
                    console.log("documents inserted");
                });
                messageTable.aggregate([
                    { $match: { _id: key } },
                    {
                      $group: {
                        _id: key, 
                        total: {
                          $sum: "$frequency"
                        }
                      }
                    },
                    { $merge: { into: "comments", whenMatched: "replace" } }
                ]);
            }
        })

При чтении документов я попытался использовать метод статистического объединения для объединения новых записей, если ключ уже существует в качестве уникального идентификатора. Это не работает в настоящее время. Как мне объединить дубликаты документов в моем MongoDB, используя NodeJS?

1 Ответ

0 голосов
/ 08 апреля 2020

Я нашел способ сделать это, читая документы и с помощью пользователя Reddit. Если кто-то хочет сделать что-то подобное, это самый простой метод:

messageTable.findOneAndUpdate({ "_id" : key },{$set: { "_id" : key}, $inc : { "frequency" : words[key] }},{upsert: true}).then(
                    console.log("document updated or inserted")
                )

При использовании этого метода первый аргумент является вашим запросом, второй изменяет первое совпадение, которое в моем случае увеличивает поле частоты, а третье - параметры метода. Опция upsert имеет значение по умолчанию false, но когда true создает новый документ, если он еще не существует. Если вы хотите sh, чтобы узнать больше, вы можете найти информацию здесь

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