MongoDB:Upserting和Sub文档

时间:2013-07-14 16:57:21

标签: mongodb

让我们假设以下架构:

{
  '_id' : 'star_wars',
  'count' : 1234,
  'spellings' : [ 
    { spelling: 'Star wars', total: 10}, 
    { spelling: 'Star Wars', total : 15}, 
    { spelling: 'sTaR WaRs', total : 5} ]
}

我可以通过这样做来更新计数和其中一个拼写:

db.movies.update( 
    {_id: "star_wars",
     'spellings.spelling' : "Star Wars" },
    { $inc : 
        { 'spellings.$.total' : 1, 
        'count' : 1 }}
)

但是这种更新形式并不适用于upsert。即,如果我尝试使用不存在的_id更新(使用upsert),或者使用不存在的拼写,则不会发生任何事情。

是否有解决方案允许我在更新($ inc)子文档时进行升级?

谢谢!

1 个答案:

答案 0 :(得分:2)

但是,您可以稍微更改您的架构。如果您的文档如下所示:

{
  '_id' : 'star_wars',
  'count' : 1234,
  'spellings' :  
    { 
        'Star wars': 10, 
        'Star Wars': 15, 
        'sTaR WaRs': 5
    }
}

您的更新将变得如此简单:

db.movies.update({_id:"star_wars"},{$inc:{"spellings.Star Wars":1}},true)