2013-01-20 187 views
2

我想更新Mongo DB中的一行。 我有一个集合指定用户Mongo:无法更新Mongo DB行

db.users.find() 

{ "_id" : ObjectId("50e2efe968caee13be412413"), "username" : "sss", "age" : 32 } 

我试图更新用户名为Erinamodobo行和修改年龄55

我曾尝试以下方法,但它不工作。

db.users.update({ "_id": "50e2efe968caee13be412413" }, { $set: { "username": "Erinamodobo" } }); 

请让我知道我犯了什么错误?

回答

2

传中,_id作为的ObjectId如果你使用的是mongo shell,否则它不会找到现有的用户。

db.users.update({"_id": ObjectId("50e2efe968caee13be412413")}, 
    { "$set" : 
      { "username": "Erinamodobo", "age" : "55" }}) 
+0

这是我一直在寻找。 – Pawan

1

使用此查询,您正在更新名称本身。

注意,一个更新的语法如下:

db.COLLECTION.update({query}, {update}, {options}) 

query其中选择要更新的记录和update指定字段,更新的值。

所以,你的情况正确的命令是:

db.users.update({ "name": "Erinamodobo" }, { $set: { "age": 55 } }); 

不过,我suggets你阅读MongoDB的文档,写的很好(http://docs.mongodb.org/manual/applications/update/

+1

(我添加了一个基于_id的答案,因为我不明白你的答案。)现在我看到了它:如果查询部分与他的原始数据匹配,那么你的更新命令可以工作。它必须是'{“username”:“sss”}',尽管这当然会将所有用户名与'sss'作为它们的值(可能不被期望)匹配。 – WiredPrairie

+0

多数民众赞成好吧我修改,并非常感谢所示的关注 – Pawan

0

作为@WiredPrairie的扩展,尽管他陈述了正确的答案,但他并没有真正解释。

OjbectId不是字符串,它实际上是一个Object所以由Object搜索你必须提供相同类型的Ojbect,即这里的ObjectId

db.users.update({ "_id": ObjectId("50e2efe968caee13be412413") }, { $set: { "username": "Erinamodobo" } }); 

这同样适用于任何特定的您使用的BSON类型从DateNumberLong您需要将参数包装在Object的类型中。