Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用流星更新记录_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 用流星更新记录

Javascript 用流星更新记录,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有一个集合余额,如果该记录不存在,我想更新或插入该集合 当我运行这样的方法时 Meteor.methods({ upsertfun:function(userid){ //let balance = 0; //var balance = Balances.findOne({userid:userid}).balance; //if(balance == null){balance = 0;} var paypal_gross =

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

当我运行这样的方法时

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
              })
    }
});
我能够插入,但在引入变量时失败

这是在中使用变量时的外观

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,服务器错误。我该怎么做才能解决这个问题?

我忘了先检查记录是否存在

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}

您的代码有点脏。注意对象链,如
balance.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
})

您也可以使用upsert方法,因此不需要检查它是否存在。