当值重复时,mongodb update $ in array失败

时间:2015-04-03 08:38:11

标签: mongodb

我想一起更新,允许多次对同一文档进行操作

例如,$ inc' csize'如果文档的_id出现X次

,则列X次

但是mongodb只能工作一次,怎么办呢?

或没有$ in的其他解决方案?

> db.user_info.findOne({_id:ObjectId("54bcc154ed9c800af1d11b47")})
{
        "_id" : ObjectId("54bcc154ed9c800af1d11b47"),
        "atime" : ISODate("2015-04-03T07:10:24.118Z"),
        "csize" : 25
}
> db.user_info.update({_id:{$in:[
        ObjectId("54bcc154ed9c800af1d11b45"),
        ObjectId("54bcc154ed9c800af1d11b45"),
        ObjectId("54bcc154ed9c800af1d11b46"),
        ObjectId("54bcc154ed9c800af1d11b47"),
        ObjectId("54bcc154ed9c800af1d11b47"),
        ObjectId("54bcc154ed9c800af1d11b47")
    ]}},
    {$inc: {csize:1}},
    true,
    true
)

> db.user_info.findOne({_id:ObjectId("54bcc154ed9c800af1d11b47")})
{
        "_id" : ObjectId("54bcc154ed9c800af1d11b47"),
        "atime" : ISODate("2015-04-03T07:10:24.118Z"),
        "csize" : 26
}

你看,54ccc154ed9c800af1d11b47的csize只有一次,而不是3次

1 个答案:

答案 0 :(得分:1)

无需在查询中执行 $in 操作三次,只需按所需的特定值增加字段(在您的情况下为3),因为{ {3}}运算符接受正值和负值。

db.user_info.update(
   { 
       "_id" : ObjectId("54bcc154ed9c800af1d11b47") 
   },
   { 
       "$inc": { "csize": 3 } 
   }
)