2013-02-12 4 views
1

내가 프로모션 수집이 여러 문서를 업데이트하여 MongoDB의 카스바의 스칼라

이 MongoDB의 컬렉션

있습니다

{ 
    "_id" : ObjectId("5115bedc195dcf55d8740f1e"), 
    "curr" : "USD", 
    "desc" : "durable bags.", 
    "endDt" : "2012-08-29T16:04:34-04:00", 
    origPrice" : 1050.99, 
    "qtTotal" : 50, 
    "qtClaimd" : 30, 
} 

가 수집 소유권을 주장한 : 누군가가 프로모션을 주장 할 때마다

{ 
    "_id" : ObjectId("5117c749195d62a666171968"), 
    "proId" : ObjectId("5115bedc195dcf55d8740f1e"), 
    "claimT" : ISODate("2013-02-10T16:14:01.921Z") 

} 

가 새 문서가 만들어집니다 inside "claimedPro"collection 여기서 proId는 첫 번째 (프로모션) 컬렉션에 대한 (가상) 외래 키입니다. 모든 주장은 "프로모션"컬렉션의 카운터 "qtClaimd"를 증가시켜야합니다. 트랜잭션 방식으로 다른 컬렉션의 값을 증가시키는 가장 좋은 방법은 무엇입니까? MongoDB에는 여러 문서에 대한 격리가 없다는 것을 알고 있습니다. 또한

, 내가 갔다 왜 이유를 다음 주장이 수천 금액의 100 단위에 일어날

프로모션은 사용자 생성 및 게시됩니다 다음과 같은 "비 Embedded"접근 방식입니다. 나는 쓴 글이 하나의 문서에서 일어날 것이라는 점을 감안할 때 프로모션 컬렉션에 클레임을 포함시키는 것이 논리적이라고 생각하지 않았습니다. (수천 건의 클레임으로 인해 크기가 커지면 'coz mongo는 프로모션 컬렉션을 크기 조정합니다.) 임베디드 방식을 사용하지 않으면 프로모션 컬렉션이 영향을받지 않지만 새로운 문서를 '클레임'컬렉션에 삽입합니다. 나중에 보고서를 생성하는 동안 해당 프로모션에 대한 'claim (청구)'세부 정보와 함께 '프로모션'세부 정보를 표시해야합니다. 비 임베디드 방식을 사용하면 먼저 "프로모션"컬렉션을 쿼리 한 다음 "프로드"로 "클레임"컬렉션을 쿼리해야합니다. * 동일한 "프로모션"에 대해 "클레임"이 동시에 발생할 수 있음을 언급 할 가치가 있습니다..

이 두 컬렉션에서 trnsactional effect를 얻는 가장 좋은 방법은 무엇입니까? Scala 2.10 버전에서는 Scala, Casbah 및 Salat을 모두 사용하고 있습니다.

답변

1
db.bar.update({ id: 1 }, { $inc: { 'some.counter': 1 } }); 

그냥 SalatDAO 이것을 실행하는 방법을 살펴, 나는 플레이 사용자 아니에요 그래서 나는 당신에게 그것에 대해 잘못된 조언을주고 싶지 않을 것이다. $inc은 증가 할 Mongo 방법입니다.