首页 > 解决方案 > 如何插入多个文档并使用 mongoose 更新它们的重复项?

问题描述

我正在尝试使用insertMany插入多个文档,但很少有文档是重复的。对于这些文件,我想更新它们。例如:

这些是用户回答文件:

var useranswers = [
  { userid: 1, question: 1, answer: 10},
  { userid: 2, question: 1, answer: 1},
  { userid: 3, question: 1, answer: 11}
]

await UserQuestions.insertMany(useranswers);

每当用户输入问题的答案时,如果已经插入,我想更新该答案。我们如何使用猫鼬来实现这一点?

标签: javascriptnode.jsmongodbmongoose

解决方案


要创建一个文档,或者如果它已经存在就更新它,你可以使用update带有upsert选项的方法。

在你的情况下:

UserQuestions.update(
    {userid: 1, question: 1}, // Update where userid == 1 and question == 1
    {$set: {userid: 1, question: 1, answer: 10}}, // Set userid = 1, question = 1, answer = 10
    {upsert: true} // Create if it doesnt exists
);

更新多个文档,你可以想象这样的事情:

var useranswers = [
    { userid: 1, question: 1, answer: 10},
    { userid: 2, question: 1, answer: 1},
    { userid: 3, question: 1, answer: 11}
];

for (var useranswer of useranswers) {
    UserQuestions.update(
        {userid: useranswer.userid, question: useranswer.question},
        {$set: {userid: useranswer.userid, question: useranswer.question, answer: useranswer.answer}},
        {upsert: true}
    );
}

希望能帮助到你。


推荐阅读