首页 文章

更新MongoDB对象字段

提问于
浏览
3

我已经搜索并尝试了许多答案,但我似乎无法让这个工作 . 我在MongoDB中有一个用户(db.users ...),我正在尝试更新一个特定文档中 Headers 为'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)处打开堆栈跟踪(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 回答

  • 1

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

    db.users.update({_ id:“2xnoy3jqcHCaFp7Br”},{$ set:{“profile.role”:“admin”}})

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

    关于错误消息,通常仅在使用单个参数(查询)运行更新而没有要更新的字段时才会发生 . 您确定要按照问题中的说明进行调用吗?

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

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

  • 7

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

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

    我经常这样做

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

相关问题