使用流星修改记录
Upserting a record using meteor
我有一个集合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}
相关文章:
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 在Safari执行javascript之前对其进行修改
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- AngularJs对所有页面中的所有记录进行排序
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- window.location替换并传递URL历史记录条目中的变量
- Javascript历史记录转换为php行
- 用Javascript修改内部标记的CSS规则
- JavaScript,PHP-用JavaScript将多个数据库记录发送到变量或表
- 历史记录和通过JavaScript修改的HTML
- CRM 2011-在插入新记录或修改现有记录时捕获子网格的事件
- 不可变的js修改所有嵌套的记录
- 使用 javascript 更改 url 和修改历史记录
- Javascript/Ajax/Jquery 修改选择记录
- 如何用Google开发者工具/firebug记录所有dom子树的修改
- 修改对象的原型,以便在每次请求变量时向控制台记录日志
- 使用流星修改记录
- 修改浏览器的最后历史记录
- 在不修改/创建实体记录的情况下触发插件
- ExtJS 4.1.1a:使用set方法修改记录后,网格中的项被取消选中