多个文件更新mongodb casbah scala

时间:2013-02-12 20:05:57

标签: mongodb scala casbah salat mongodb-scala

我有两个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")

}

每当有人宣传促销时,都会在“claimPro”集合中创建一个新文档,其中proId是第一个(促销)集合的(虚拟)外键。每个索赔都应在“促销”集合中增加一个“qtClaimd”计数器。以事务方式增加另一个集合中的值的最佳方法是什么?我知道MongoDB没有多个文档的隔离。

另外,我采用“非嵌入式”方法的原因如下

促销活动被创建并发布给用户,然后声明将发生在数千个数量。我不认为在促销集合中嵌入索赔是合乎逻辑的,因为写入的数量将在单个文档中发生('coz mongo在大小因数千个索赔而增长时调整促销集合的大小)。使用非嵌入式方法可以使促销集合不受影响,但在“声明”集合中插入新文档。稍后在生成报告时,我将必须显示“促销”详细信息以及该促销的“声明”详细信息。使用非嵌入式方法,我将首先查询“promo”集合,然后使用“proId”查询“claim”集合。 * 还值得一提的是,有时可能会有100个“声明”同时发生在同一个“促销”* 上。

使用这两个集合实现trnsactional效果的最佳方法是什么?我使用Scala,Casbah和Salat都使用Scala 2.10版本。

1 个答案:

答案 0 :(得分:1)

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

看看如何用SalatDAO运行这个,我不是一个游戏用户所以我不想给你错误的建议。 $inc是Mongo的增量方式。