更新MongoDB对象字段

时间:2014-06-03 18:18:28

标签: mongodb database

我已经搜索并尝试了许多答案,但我似乎无法使其正常工作。我在MongoDB中有一个用户(db.users ...),我正在尝试更新一个名为“#role”的字段'在一个特定的文件中。如果我执行:

db.users.find();

我明白了:

{ "_id" : "fDx2g34G8vxsDu3vf", "createdAt" : ISODate("2014-06-03T16:31:47.382Z"), 
  "emails" : [  {  "address" : "andrewmlarking@gmail.com",  "verified" : false } ], 
  "profile" : { "name" : "Admin", "role" : "user", "division" : "0", "enrolled" : "false" }, 
  "services" : { "password" : { "srp" : { "identity" "dEad06c_5mjzsprUzgRyh6tB66OiaybdLzbnxFzO1xh",
  "salt" : "zqWsh etc etc

如果我执行:

,那很好
db.users.update({_id:"2xnoy3jqcHCaFp7Br"}, { role:"admin"});

我得到了:

  

断言失败:需要一个对象错误:打印堆栈跟踪       在printStackTrace(src / mongo / shell / utils.js:37:15)       at doassert(src / mongo / shell / assert.js:6:5)       在assert(src / mongo / shell / assert.js:14:5)       在DBCollection.update(src / mongo / shell / collection.js:220:5)       at(shell):1:10

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:7)

首先,如果您尝试更新配置文件子文档的角色字段,则语法已关闭。它应该是:

db.users.update({_ id:&#34; 2xnoy3jqcHCaFp7Br&#34;},{$ set:{&#34; profile.role&#34;:&#34; admin&#34;}})< / p>

否则您只需删除文档的所有其他字段。

关于错误消息,通常仅在使用单个参数(查询)运行update而没有要更新的字段时才会发生。你确定在问题中记录了它吗?

无论我是否强烈建议您查看MongoDB文档以获取更新:

http://docs.mongodb.org/manual/tutorial/modify-documents/

答案 1 :(得分:1)

也许您应该尝试将ObjectId添加到查询中。

另外,正如@John Petrone指出的那样,你应该使用$ set

我经常做

db.users.update({_id:ObjectId("2xnoy3jqcHCaFp7Br")}, {$set: { "profile.role":"admin"});