使用流星upsert的问题

时间:2015-05-11 16:30:42

标签: meteor upsert

使用METEOR@1.1.0.2并在服务器端执行upsert会给我带来麻烦。它要么抱怨插入或更新的语法错误,要么我只是做错了?

下面的代码适用于插入但更新时抛出:

  

错误:更新参数不能包含修饰符和非修饰符字段。

Mail.upsert({ ma_user_id: userId }, {
  ma_user_id: userId,
  ma_address: userEmail,
  ma_verified: false
}, function (e, r) {
  console.log(e, r);
});

以下代码适用于更新,但会在插入时抛出此错误: MongoError:

  

美元($)前缀字段' $存在'已删除。$ exists'对存储无效。

Mail.upsert({ ma_user_id: userId }, { $set: {
    ma_user_id: userId,
    ma_address: userEmail,
    ma_verified: false
  }
}, function (e, r) {
  console.log(e, r);
});

我也试过这个,这给了我更新时的错误:

  

错误:更新参数不能包含修饰符和非修饰符字段。

Mail.update({ ma_user_id: userId }, {
    ma_user_id: userId,
    ma_address: userEmail,
    ma_verified: false
  }, {
    upsert: true
  }, function (e, r) {
    console.log(e, r);
  });

1 个答案:

答案 0 :(得分:0)

错误消息基本上表示您不能在选择器和修改器中使用相同的字段。所以你必须从修饰符中删除ma_user_id,如下所示:

Mail.upsert({ ma_user_id: userId }, {      
  ma_address: userEmail,
  ma_verified: false
}, function (e, r) {
  console.log(e, r);
});