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(无需任何选项)。