meteor.js - upsert 不会抛出控制台错误,但不会插入数据
meteor.js - upsert does not throw a console error, but doesn't insert data
我正在尝试使用 upsert
更新或插入数据,但它不起作用。
更新和插入都不起作用...
但我在终端和控制台中都没有看到任何错误。
有人看到我的代码有问题吗?
这是我插入或更新数据的函数内部,我也将 SimpleSchema 用于 Measures 集合。
questions.forEach(question => {
Measures.upsert(question._id, {
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
});
});
参考:Meteor Upsert Restricted Collection 403 Error
流星版本:2.5.0
已添加
更新部分已解决。
在本例中为 {_id: question._id}
的选择器实际上并未匹配。
questions.forEach(question => {
const questionId = Measures.findOne({questionId: question._id}); // added
Measures.upsert(
{_id: questionId?._id},
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
);
});
但是我仍然无法插入新数据,因为如果日期不存在,就没有questionId
。
我在 {_id: questionId?._id}
中添加了问号只是为了隐藏错误 TypeError: Cannot read properties of undefined (reading '_id') meteor
但这并没有解决问题。
如何插入新数据?
你在这里混淆了东西,我不确定 question
是来自 Measures
集合还是来自不同集合的文档。
选项 A - question
是来自 Measures
集合的文档
如果是这样,您需要摆脱 questionId
并使用 _id
questions.forEach(question => {
Measures.upsert(
{ _id: question._id },
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
);
});
选项 B - question
是来自不同集合的文档
然后你需要在 $set:
上显式设置 questionId
作为字段
questions.forEach(question => {
Measures.upsert(
{ questionId: question._id }},
{
$set: {
title: question.text,
questionId: question._id, // required to associate measures with questions
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
);
});
提示:上下文很重要,这就是为什么您在提问时应该始终弄清楚文档和集合之间的关系。
我正在尝试使用 upsert
更新或插入数据,但它不起作用。
更新和插入都不起作用... 但我在终端和控制台中都没有看到任何错误。
有人看到我的代码有问题吗?
这是我插入或更新数据的函数内部,我也将 SimpleSchema 用于 Measures 集合。
questions.forEach(question => {
Measures.upsert(question._id, {
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
});
});
参考:Meteor Upsert Restricted Collection 403 Error
流星版本:2.5.0
已添加
更新部分已解决。
在本例中为 {_id: question._id}
的选择器实际上并未匹配。
questions.forEach(question => {
const questionId = Measures.findOne({questionId: question._id}); // added
Measures.upsert(
{_id: questionId?._id},
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
);
});
但是我仍然无法插入新数据,因为如果日期不存在,就没有questionId
。
我在 {_id: questionId?._id}
中添加了问号只是为了隐藏错误 TypeError: Cannot read properties of undefined (reading '_id') meteor
但这并没有解决问题。
如何插入新数据?
你在这里混淆了东西,我不确定 question
是来自 Measures
集合还是来自不同集合的文档。
选项 A - question
是来自 Measures
集合的文档
如果是这样,您需要摆脱 questionId
并使用 _id
questions.forEach(question => {
Measures.upsert(
{ _id: question._id },
{
$set: {
title: question.text,
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
);
});
选项 B - question
是来自不同集合的文档
然后你需要在 $set:
上显式设置questionId
作为字段
questions.forEach(question => {
Measures.upsert(
{ questionId: question._id }},
{
$set: {
title: question.text,
questionId: question._id, // required to associate measures with questions
type:
question.type === QuestionType.SHORT_ANSWER
? MeasureType.TEXT
: MeasureType.MULTIPLE_CHOICE,
typeOptions: {frequency},
shortCodeOptions: {},
entity: System.getCurrentEntity(),
},
},
);
});
提示:上下文很重要,这就是为什么您在提问时应该始终弄清楚文档和集合之间的关系。