使用流星修改记录

Upserting a record using meteor

本文关键字:记录 修改 流星      更新时间:2023-09-26

我有一个集合balances,我想更新或插入,如果该记录不存在。

当我像这样运行这个方法时,

Meteor.methods({
    upsertfun:function(userid){
    //let balance = 0;
        //var balance  = Balances.findOne({userid:userid}).balance;
        //if(balance == null){balance = 0;}
        var paypal_gross = 200;
        //var updatedbalance = parseInt(balance) + parseInt(paypal_gross);
        Balances.update({
                 userid: userid,
                 balance: 30
              }, {
                 $set: {
                    userid: userid,
                    balance: 543
                 }
              }, {
                  upsert: true
              })
    }
});

我可以upsert,但是当我引入变量时失败了。

下面是

中变量的样子
Meteor.methods({
    upsertfun:function(userid){
    //let balance = 0;
        var balance  = Balances.findOne({userid:userid}).balance;
        if(balance == null){balance = 0;}
        var paypal_gross = 200;
        var updatedbalance = parseInt(balance) + parseInt(paypal_gross);
        Balances.update({
                 userid: userid,
                 balance: balance
              }, {
                 $set: {
                    userid: userid,
                    balance: updatedbalance
                 }
              }, {
                  upsert: true
              })
    }
});

由于某些原因,这一直抛出错误500,服务器错误。

你的代码有点脏。注意像Balances.findOne().balance这样的对象链。当findOne()返回null时,你会得到一个致命的错误,因为你试图访问null对象的未定义属性。

var balance_item = Balances.findOne({ userid: userid });
var balance = 0;
if (balance_item) {
    balance = balance_item.balance;
}
var paypal_gross = 200;
var updatedbalance = parseInt(balance) + parseInt(paypal_gross);
Balances.update({
    userid: userid,
    balance: balance
}, {
    $set: {
    userid: userid,
    balance: updatedbalance
    }
}, {
    upsert: true
})

我忘了先检查record是否存在

Meteor.methods({
    upsertfun:function(userid){
         var selector = {
            "userid": userid
            };
           var this_exists = Balances.find(selector, {limit: 1}).count() > 0;
           if(this_exists == true) {
           console.log('exists');
           } else {
        Balances.insert({userid:userid,balance:0});
           }
    //let balance = 0;
        var balance  = Balances.findOne({userid:userid}).balance;
        if(balance == null){balance = 0;}
        var paypal_gross = 200;
        var updatedbalance = parseInt(balance) + parseInt(paypal_gross);
        Balances.update({
                 userid: userid,
                 balance: balance
              }, {
                 $set: {
                    userid: userid,
                    balance: updatedbalance
                 }
              }, {
                  upsert: true
              })
    }
});

upsert方法有4个参数:queryDocument, changeDocument, options, callback。options参数可以是{upsert: true}