在Meteor中实现upsert命令的时间有多快?
而且,同时做同样事情的最好方法是什么?
这样的事情就是我现在正在做的事情:
if typeof ( item = Items.findOne({title:'Foo'}) ) == 'undefined'
item = Items.insert({title:'Foo'})
else
Items.update(item._id, {$set: {title:'Foo'}})
# do something with item
答案 0 :(得分:5)
在Meteor中实现upsert命令的时间有多快?
更新:@Thomas4019指出现在支持upsert
:
v0.6.6
“添加upsert支持.Follection.update现在支持{upsert:true}选项。此外,添加一个Collection.upsert方法,如果适用,返回新插入的对象ID。”
来源:History.md
使用文档:http://docs.meteor.com/#upsert
- 原始答案如下 -
Trello Meteor路线图上有一张卡片,您可以投票表明它对您的重要性:https://trello.com/c/C91INHmj
它目前处于“后期”列表中,这意味着它将在实施之前一段时间,除非它收到很多选票。
另一个需要注意的重要事项是,由于meteor是开源的,您可以自己实施必要的更改并提交回来。
同时做同样事情的最佳方式是什么?
有几种解决方案,但最适合您的用例,如果不了解您的设计,则无法判断。
按原样使用代码,为集合添加唯一索引,并在/出现时处理重复键错误
更改设计以实现显式乐观并发。
这两个解决方案的核心是相同的,优雅地处理错误情况。 #1更容易实现。 #2允许更灵活地处理乐观并发。
答案 1 :(得分:0)
如果您真的想这样做,可以直接使用mongodb连接:MongoInternals.defaultRemoteCollectionDriver().mongo.db.collection('myCollection').update(query, update, {upsert: true})
。当然,这种联系没有记录,所以将来有可能改变它。
答案 2 :(得分:0)
使用此技巧,Upsert非常简单。你只需检查它是否有_id
属性:
if(item._id){
//update
}else{
//insert
}