如果不存在则插入,如果存在则更新

时间:2019-05-31 12:50:24

标签: node.js mongodb

我正在从此API吸引用户。

https://redmine-mock-api.herokuapp.com/api/v1/users

共有100个(100个不同的ID)。我使用猫鼬将它们添加到mongodb数据库中,但问题是它一直在添加(我已经有5000个用户(50次重复100个用户)

如果id不存在,我想添加;如果存在,则要更新。

我在做什么错? users是API中的用户数组

 db.collection("users").insertMany(users, function (error, response) {
                        if (error) throw error;
                        console.log("Number of users inserted: " + response.insertedCount);
                        db.close();
                    });

3 个答案:

答案 0 :(得分:3)

尝试以下格式

db.collection.update({'_id': Id}, //Find with the unique identifier
                     {//put whatever you want to insert},
                     {upsert: true}
                    )

答案 1 :(得分:0)

看着mongo db docs似乎insertMany不是您要在这里使用的。您可能想使用updateMany,因为它支持upserts不支持的insertMany

您应该可以使用以下内容:

db.collection("users").updateMany(
   {},
   users,
   {
     upsert: true
   }
)

这是一个空的过滤器,因此如果该项目不存在,则将插入,如果存在则进行更新。

答案 2 :(得分:0)

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>
   }
)

updateMany()方法采用以下参数:


过滤器
更新的选择标准。可以使用与find()方法相同的查询选择器。

  • 指定一个空文档{}以更新集合中的所有文档。

更新
要应用的修改。

  • 使用$ set,$ unset或$ rename等更新运算符。

Upsert
可选的。如果为true,则updateMany()之一:

如果没有文档与过滤器匹配,则创建一个新文档。有关更多详细信息,请参见upsert行为。 更新与过滤器匹配的文档。 为避免多次更新,请确保对过滤器字段进行唯一索引。

默认为false。

db.users.updateMany(
       {},
       {$set: users},
       {
         upsert: true
       }
    )