1

我有两个 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 是第一个(促销)集合的(虚拟)外键。每个声明都应在“promo”集合中增加一个计数器“qtClaimd”。以事务方式增加另一个集合中的值的最佳方法是什么?我了解 MongoDB 没有针对多个文档的隔离。

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

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

用这两个集合实现交易效果的最佳方法是什么?我在 Scala 2.10 版本中使用 Scala、Casbah 和 Salat。

4

1 回答 1

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

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

于 2013-02-14T02:35:10.833 回答