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