Mongodb 同时更新和插入数据 |更新插入,react.js,meteor.js
Mongodb update and insert data at the same time | upsert, react.js, meteor.js
如果问题已经存在,我会尝试更新问题,如果用户添加新问题,我会尝试插入新问题。
const onSave = () => {
if (creating) {
// ・・ when you create a new questions, this runs
} else if (editing) {
// when you edit questions, this runs
questions.forEach((question) => {
Measures.update(
{ _id: question._id },
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: { frequency },
shortCodeOptions: {},
entity: System.getCurrentEntity()
}
}
);
});
}
};
现在,我只是 Measures.update()
更新问题。
但是我想不仅要更新,而且要将新问题插入到 Measures 集合中,如果它们是刚刚添加的话。
我查看了 mongodb 文档 upsert 但需要更多帮助。
https://www.mongodb.com/docs/drivers/node/current/fundamentals/crud/write-operations/upsert/
我试过了,但收到一条错误消息“Mesures.updateMany() 不是一个函数”
Measures.updateMany(
{_id: question._id},
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
{upsert: true},
);
mongodb版本5.0.6
您查看的文档有误。 Meteor 集合 不是 mongodb-driver 集合。您想要使用 https://docs.meteor.com/api/collections.html#Mongo-Collection-upsert,即只需将 update
替换为 upsert
(无需任何选项)。
如果问题已经存在,我会尝试更新问题,如果用户添加新问题,我会尝试插入新问题。
const onSave = () => {
if (creating) {
// ・・ when you create a new questions, this runs
} else if (editing) {
// when you edit questions, this runs
questions.forEach((question) => {
Measures.update(
{ _id: question._id },
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: { frequency },
shortCodeOptions: {},
entity: System.getCurrentEntity()
}
}
);
});
}
};
现在,我只是 Measures.update()
更新问题。
但是我想不仅要更新,而且要将新问题插入到 Measures 集合中,如果它们是刚刚添加的话。
我查看了 mongodb 文档 upsert 但需要更多帮助。 https://www.mongodb.com/docs/drivers/node/current/fundamentals/crud/write-operations/upsert/
我试过了,但收到一条错误消息“Mesures.updateMany() 不是一个函数”
Measures.updateMany(
{_id: question._id},
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
{upsert: true},
);
mongodb版本5.0.6
您查看的文档有误。 Meteor 集合 不是 mongodb-driver 集合。您想要使用 https://docs.meteor.com/api/collections.html#Mongo-Collection-upsert,即只需将 update
替换为 upsert
(无需任何选项)。