2012-11-03 3 views
5

얼마나 빨리 upsert 명령이 Meteor에서 구현됩니까?Meteor upsert equivalent

그리고 평균 시간에 같은 일을하는 가장 좋은 방법은 무엇입니까?

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 
+2

을주의 두 개의 클라이언트가 동시에()를 findOne를 실행하면 { '푸'제목}'와 두 문서, 그 만들 수 있습니다. –

+0

사실, upsert의 유성 구현이 이상적입니다. 두 개의 클라이언트가 동일한 데이터로 upsert를 실행하면 클라이언트 시뮬레이트 된 db에 개별 문서가 만들어집니다. 유성은 서버에서 실행될 때 두 문서를 동기화합니다. 그것은 조금 털이 많을지도 모르지만 ... 나는 그것이 아직 구현되지 않은 이유를 알 수 있습니다. – tom

답변

5

방법 곧 upsert 명령이 유성에서 구현 될 것 같은

뭔가 내가 지금하고있어 무엇인가?

UPDATE : 그 upsert 밖으로 @Thomas4019 포인트가 지원됩니다 :

v0.6.6

"upsert 지원을 추가 Collection.update 이제 {upsert : TRUE} 지원합니다.. 옵션을 또한, 추가 해당하는 경우 새로 삽입 된 객체 ID를 반환하는 Collection.upsert 메소드. "

출처 : History.md

사용 설명서 : http://docs.meteor.com/#upsert

- 원래의 대답은 다음과 -

당신이 당신의 중요성을 표시하기에 투표 할 수있는 Trello 유성 로드맵에 카드가있다 : https://trello.com/c/C91INHmj

현재 "나중에"목록에 있습니다. 이는 투표를 많이받지 않으면 구현되기까지 시간이 걸릴 것임을 의미합니다.

다른 중요한 점은 meteor는 오픈 소스이기 때문에 필요한 변경 사항을 직접 구현하고 다시 제출할 수 있다는 것입니다.


평균 시간에 같은 일을하는 가장 좋은 방법은 무엇입니까?

몇 가지 해결책이 있지만 유스 케이스에 가장 적합한 것은 디자인에 대한 지식이 없어도 알 수 없습니다.

  1. 는 그대로 코드를 사용하여 컬렉션에 고유 인덱스를 추가하고 명시 적으로 낙관적 동시성을 구현하기 위해

  2. 변경 설계를 발생할 때/경우 중복 키 오류를 처리합니다.

이 두 가지 솔루션의 핵심은 동일하며 정상적으로 오류를 처리합니다. # 1은 더 쉽게 구현할 수 있습니다. # 2는 낙관적 인 동시성이 처리되는 방법에 더 큰 융통성을 허용합니다.

+1

Upsert 기능이 내장되어 있습니다. – Thomas4019

0

정말로 원하는 경우 mongodb 연결을 직접 사용할 수 있습니다 (MongoInternals.defaultRemoteCollectionDriver().mongo.db.collection('myCollection').update(query, update, {upsert: true})). 물론이 연결은 문서화되지 않았으므로 나중에 변경 될 수 있습니다.

0

Upsert는 정말 쉽습니다.당신은 단지 그것이 _id 특성이 있는지 확인 :`않습니다 : 솔루션으로

if(item._id){ 
    //update 
}else{ 
    //insert 
}