2013-02-12 5 views
1

У меня есть две коллекции MongoDBНесколько документов обновление MongoDB Касба Scala

промо коллекция:

{ 
    "_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") 

} 

Всякий раз, когда кто-то утверждал, промо, новый документ будет создан внутри коллекции «утверждаемыйPro», где proId является (виртуальным) внешним ключом для первой (промо) коллекции. Каждое требование должно увеличивать счетчик «qtClaimd» в коллекции «promo». Каков наилучший способ увеличить стоимость в другой коллекции транзакционным способом? Я понимаю, что у MongoDB нет изоляции для нескольких документов.

Кроме того, причина, почему я пошел с «не встраиваемый» подход, как следовать

промо получает создан и опубликован для пользователей, то претензии будут происходить в 100s тысяч количествах. Я не думал, что логично вкладывать претензии в промо-коллекцию, учитывая, что количество записей будет происходить в одном документе («coz mongo изменяет размер рекламной коллекции, когда размер растет из-за тысяч претензий»). Наличие не-внедренного подхода не влияет на промо-сбор, но вставляет новый документ в коллекцию «претензий». Позже, создавая отчет, мне придется отображать «промо», а также детали «претензий» для этого промо. С не-внедренным подходом мне придется сначала запросить коллекцию «promo», а затем собрать «заявки» с помощью «proId». * Также стоит упомянуть, что могут существовать случаи, когда 100 «претензий» могут происходить одновременно для одного и того же «промо» *.

Каков наилучший способ добиться эффекта trnsactional с этими двумя коллекциями? Я использую Scala, Casbah и Salat с версией Scala 2.10.

ответ

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

Просто посмотрите на то, как управлять этим с SalatDAO, я не являюсь пользователем игры, так что я бы не хотел, чтобы дать вам неправильный советовать об этом. $inc - Монгольский способ увеличения.