5

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
4

3 回答 3

5

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. 更改设计以实现显式乐观并发。

这两种解决方案的核心是相同的,优雅地处理错误情况。#1 更容易实现。#2 在如何处理乐观并发方面提供了更大的灵活性。

于 2013-01-14T01:27:56.977 回答
0

如果你真的想这样做,你可以直接使用 mongodb 连接:MongoInternals.defaultRemoteCollectionDriver().mongo.db.collection('myCollection').update(query, update, {upsert: true}). 当然,这种联系没有记录在案,因此将来有可能对其进行更改。

于 2013-09-22T21:49:03.450 回答
0

使用这个技巧,Upsert 真的很容易。您只需检查它是否具有_id属性:

if(item._id){
  //update
}else{
  //insert
}
于 2016-03-26T19:33:30.770 回答