【问题标题】:Updating MongoDB object field更新 MongoDB 对象字段
【发布时间】:2014-07-24 04:53:48
【问题描述】:

我已经搜索并尝试了很多答案,但我似乎无法让它发挥作用。我在 MongoDB 中有一个用户(db.users ...),我正在尝试更新一个特定文档中标题为“角色”的字段。如果我执行:

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) 在 doassert (src/mongo/shell/assert.js:6:5) 在断言 (src/mongo/shell/assert.js:14:5) 在 DBCollection.update (src/mongo/shell/collection.js:220:5) 在(外壳):1:10

有什么想法吗?

谢谢。

【问题讨论】:

    标签: mongodb database


    【解决方案1】:

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

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

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

    关于错误消息,通常仅在您使用单个参数(查询)运行更新而没有要更新的字段时发生。你确定你是按照你的问题中记录的那样称呼它吗?

    尽管我强烈建议您查看 MongoDB 文档以获取更新:

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

    【讨论】:

    • 你好。这不会引发任何错误,但不会更新该字段。忽略这一点,它工作得很好。谢谢你。我现在就去阅读文档。
    【解决方案2】:

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

    另外,正如@John Petrone 所指出的,您应该使用 $set

    我经常这样做

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-20
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2019-06-02
      • 2014-06-01
      相关资源
      最近更新 更多