【问题标题】:How do you insert multiple documents and update them the duplicates using mongoose?如何插入多个文档并使用 mongoose 更新它们的重复项?
【发布时间】:2018-10-23 15:31:00
【问题描述】:

我正在尝试使用 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);

每当用户输入问题的答案时,如果该答案已被插入,我想更新该答案。我们如何使用 mongoose 实现此目的?

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    要创建一个文档,或者如果它已经存在就更新它,你可以使用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}
        );
    }
    

    希望对你有帮助。

    【讨论】:

    • 这将是在循环中更新它们的最后手段。没有别的办法吗?
    • 而在上面的例子中,如果已经在where子句中,为什么还要将userid设置为1
    • 您必须将 userid 设置为 1,因为如果文档不存在,它将设置此值
    • 没有办法在一个简单的请求中更新多个文档,根据文档设置不同的值。
    猜你喜欢
    • 2018-01-13
    • 2019-07-09
    • 1970-01-01
    • 2018-01-02
    • 2017-09-22
    • 2015-02-19
    • 2016-12-24
    相关资源
    最近更新 更多