upsert 命令多久会在 Meteor 中实施?
而且,同时做同样事情的最佳方法是什么?
我现在正在做这样的事情:
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
upsert 命令多久会在 Meteor 中实施?
更新:@Thomas4019指出upsert
现在支持:
v0.6.6
“添加 upsert 支持。Collection.update 现在支持 {upsert: true} 选项。此外,添加一个 Collection.upsert 方法,该方法返回新插入的对象 ID(如果适用)。”
资料来源:History.md
使用文档:http ://docs.meteor.com/#upsert
-- 原始答案如下 --
Trello Meteor 路线图上有一张卡片,您可以投票以表明它对您的重要性:https ://trello.com/c/C91INHmj
它目前在“稍后”列表中,这意味着它需要一段时间才能实施,除非它获得大量选票。
另一个需要注意的重要事情是,由于流星是开源的,您可以自己实施必要的更改并提交回来。
同时做同样事情的最好方法是什么?
有几种解决方案,但如果不了解您的设计,就不可能说出最适合您的用例的解决方案。
按原样使用代码,向集合添加唯一索引,并在出现重复键错误时处理它
更改设计以实现显式乐观并发。
这两种解决方案的核心是相同的,优雅地处理错误情况。#1 更容易实现。#2 在如何处理乐观并发方面提供了更大的灵活性。
如果你真的想这样做,你可以直接使用 mongodb 连接:MongoInternals.defaultRemoteCollectionDriver().mongo.db.collection('myCollection').update(query, update, {upsert: true})
. 当然,这种联系没有记录在案,因此将来有可能对其进行更改。
使用这个技巧,Upsert 真的很容易。您只需检查它是否具有_id
属性:
if(item._id){
//update
}else{
//insert
}