2013-02-12 86 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") 

} 

每当有人声称促销,新文件将被创建其中proId是第一个(促销)收藏的(虚拟)外键。每个声明都应增加“促销”集合中的“qtClaimd”计数器。以事务性方式增加另一个集合中的值的最佳方式是什么?我知道MongoDB没有隔离多个文档。

另外,之所以我去“非嵌入式”的做法是遵循

宣传片被创建并发布到用户,那么索赔将数千数百金额发生。考虑到写入次数会在单个文档中发生,因此我认为在宣传集合中嵌入声明是不合逻辑的('因为数以千计的声明导致大小增加时,会调整大小的促销集合')。采用非嵌入式方法可以使促销收藏不受影响,但可以在“索赔”集合中插入新文档。稍后在生成报告时,我将不得不显示“促销”细节以及该促销的“声明”细节。使用非嵌入式方法,我必须首先查询“promo”集合,然后使用“proId”来“索取”集合。 * 另外值得一提的是,可能有几次“索赔”可能同时发生在同一个“促销”*

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

回答

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

只要看看如何使用SalatDAO运行这个,我不是一个游戏用户,所以我不希望向您提供有关错误的建议。 $inc是Mongo增加的方式。