使用$ inc更新不会增加字段

时间:2012-12-16 00:32:33

标签: mongodb

你能告诉我我做错了吗?

我有以下文件

{
        "_id" : ObjectId("5013df3e4a4314271d002476"),
        "bgtiled" : NumberLong(1),
        "post_count" : NumberLong(0),
        "url" : "fb_test",
        "url_lower" : "fb_test",
        "user_id" : NumberLong(4044217),
        "verified" : NumberLong(0)
}

我想增加post_count。根据{{​​3}}我这样做

db.users.update({user_id : 4044217}, {$inc : {post_count : 1}});

并且它不会增加字段。我也试过这个

db.users.update({user_id : 4044217}, {$inc : {"post_count" : 1}});

和这个

db.users.update({user_id : 4044217}, {"$inc" : {"post_count" : 1}});

没有结果:(

2 个答案:

答案 0 :(得分:1)

如果您在shell中执行此操作,找到正在发生的事情的一种方法是检查此更新中返回的getLastError()调用。

由于shell会在每个条目上自动为您调用getLastError(),您可以采用以下两种方法之一:

> db.users.update({user_id : 4044217}, {$inc : {post_count : 1}})
> db.getPrevError()
{ "err" : null, "updatedExisting" : true, "n" : 1, "nPrev" : 8, "ok" : 1 }

或者你可以在shell通过

为你调用GLE之前解决错误
> db.users.update({user_id : 4044217}, {$inc : {post_count : 1}}); db.getLastErrorObj();
{
    "updatedExisting" : false,
    "n" : 0,
    "connectionId" : 2,
    "err" : null,
    "ok" : 1
}

注意:在第二个示例中,GLE调用必须与更新位于同一行。

在您的情况下,您似乎已经获得了一个现有文档已更新的信息,这可能促使您通过

检查更新语句的find子句
> db.users.find( {user_id : 4044217} )

会返回多个文档。

答案 1 :(得分:0)

原来我有多个与查询匹配的文档,只有一个已更新。

对不起。