使用meteor记录一条记录

时间:2016-08-30 00:31:18

标签: javascript mongodb meteor

我有一个集合:dependencies [[log4j/log4j "1.2.17"]] ,如果该记录不存在,我想要更新或插入。

当我运行这样的方法时,

balances

我能够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: 30
              }, {
                 $set: {
                    userid: userid,
                    balance: 543
                 }
              }, {
                  upsert: true
              })
    }
});

出于某种原因,这会导致错误500,服务器错误。我该怎么做才能解决这个问题?。

3 个答案:

答案 0 :(得分:0)

我忘记检查记录是否存在

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
              })
    }
});

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你的代码有点脏。注意像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
})