0

你们能告诉我我做错了什么吗?

我有以下文件

{
        "_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. 根据文档,我这样做

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}});

没有结果:(

4

2 回答 2

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} )

这将返回多个文档。

于 2012-12-16T03:42:01.063 回答
0

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

对不起。

于 2012-12-16T00:45:44.293 回答