我已经搜索并尝试了许多答案,但我似乎无法让这个工作 . 我在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 回答
首先,如果您尝试更新配置文件子文档的角色字段,则语法将关闭 . 它应该是:
db.users.update({_ id:“2xnoy3jqcHCaFp7Br”},{$ set:{“profile.role”:“admin”}})
否则,您只需删除文档的所有其他字段 .
关于错误消息,通常仅在使用单个参数(查询)运行更新而没有要更新的字段时才会发生 . 您确定要按照问题中的说明进行调用吗?
无论我是否强烈建议您查看MongoDB文档以获取更新:
http://docs.mongodb.org/manual/tutorial/modify-documents/
也许您应该尝试将
ObjectId
添加到查询中 .另外,正如@John Petrone指出的那样,你应该使用$ set
我经常这样做
db.users.update({_id:ObjectId("2xnoy3jqcHCaFp7Br")}, {$set: { "profile.role":"admin"});