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方法,因此不需要检查它是否存在。