javascript - 如何插入多个文档并使用 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);
每当用户输入问题的答案时,如果已经插入,我想更新该答案。我们如何使用猫鼬来实现这一点?
解决方案
要创建一个文档,或者如果它已经存在就更新它,你可以使用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}
);
}
希望能帮助到你。
推荐阅读
- rust - 在 Rust 中访问数组中的越界索引 - 编译与运行时错误?
- laravel-blade - laravel 8刀片仪表板
- c# - 增加或减少分配给属性的值以使三角形变小或变大
- c# - ASP.NET Core [Authorize] 要求登录页面最近登录的用户
- powerapps - Powerapps - 使用带有整数数据的拨动开关
- c++ - 在自定义类中使用 PubSubClient
- c++ - 键入允许通用分配的已擦除引用包装器,这可能吗?
- r - 在数据中显示共享和独特的特征
- python - 在 matplotlib 中跨子图绘制分界线
- linux - Linux shell 负值打印问题