繁体   English   中英

多个文档更新了mongodb casbah scala

[英]Multiple documents update mongodb casbah 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")

}

每当有人要求促销时,都会在“ claimedPro”集合中创建一个新文档,其中proId是第一个(促销)集合的(虚拟)外键。 每个声明都应在“促销”集合中增加一个计数器“ qtClaimd”。 以事务方式增加另一个集合中的值的最佳方法是什么? 我了解MongoDB没有隔离多个文档的功能。

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

创建促销并将其发布给用户,然后声称将发生数十万次。 考虑到将在单个文档中进行写操作的次数,我不认为将声明嵌入促销集合中是合乎逻辑的(由于成千上万的声明,当大小增加时,'coz mongo会调整促销集合的大小)。 采用非嵌入式方法可以使促销收藏不受影响,但可以在“声明”收藏中插入新文档。 稍后在生成报告时,我将必须显示该促销的“促销”详细信息以及“声明”详细信息。 使用非嵌入式方法,我必须首先查询“ promo”集合,然后使用“ proId”查询“ claims”集合。 * 还值得一提的是,对于同一“促销”,有时可能会同时发生数百个“声明”

通过这两个集合来达到交易效果的最佳方法是什么? 我正在使用Scala 2.10版本的Scala,Casbah和Salat。

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

只是看看如何使用SalatDAO来运行它,我不是游戏用户,所以我不想为您提供错误的建议。 $inc是Mongo递增的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM