【问题标题】:How do I add another value to a dictionary in MongoDB?如何向 MongoDB 中的字典添加另一个值?
【发布时间】:2012-07-01 05:00:56
【问题描述】:

这是我正在尝试做的一个示例,因为我无法解释我的意思。

我在 mongo CLI 中执行此操作:db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []})。我想要做的是更新该条目以向comments 字典添加评论。

我将如何使用db.posts.update() 实现这一目标?

【问题讨论】:

  • 我已经编辑了这个问题,使它成为一个“真正的问题”。如果这仍然不符合您的标准,请告诉我问题所在。
  • 要将元素添加到数组中,我认为您想要的是 $push 或 $addToSet:mongodb.org/display/DOCS/Updating

标签: shell mongodb mongo-shell


【解决方案1】:

OP 的问题和示例不匹配。他实际上是想在文档内的数组中插入一个字段,这意味着

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}});

工作得很好。

但是,如果您想向字典中添加值或子文档,您可以使用$set 命令。以本文档为例:

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": 5,
        "bananas": 10
    }
}

假设您希望将"apples": 2 添加到项目中。该命令将是

db.collection.update({"name": "Farmer John"},
                     {"$set": {"items.apples": 2}});

您的文档将如下所示:

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": 5,
        "bananas": 10,
        "apples: 2
    }
}

请注意,这也适用于插入子文档,因此我们可以修改原始示例:

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": {
            "yellow": 5,
            "white": 3
        }
    }
}

让我们插入 4 个青苹果和 8 个富士苹果。

db.collection.update({"name": "Farmer John"},
                     {"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}});

我们的文档现在是:

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": {
            "yellow": 5,
            "white": 3
        },
        "apples": {
            "fuji": 8,
            "granny smith": 4
        }
    }
}

最后一条评论:请注意,如果子文档或字段已经存在,那么它将被$set 命令覆盖。

【讨论】:

    【解决方案2】:

    对于像这样的对象:

    {
      name: "Hello, world!",
      content: "This is my first post"
    }
    

    如果你现在运行

    db.posts.update({name: "Hello, world!"}, {name: "First post"});
    

    这就是结果:

    {
      title: "First post"
    }
    

    内容属性将被删除,因为没有提供替换值。 我之所以提到这一点,是因为这是一个常见错误。

    所以如果你想“添加”一个属性,你需要运行:

    db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}});
    
    如果要将数据附加到数组,则使用

    $push。如果它是一个普通字段,请使用 $set。

    参考:http://www.mongodb.org/display/DOCS/Updating

    【讨论】:

      猜你喜欢
      • 2022-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2023-03-11
      • 2022-07-10
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      相关资源
      最近更新 更多