如何在MongoDB中为字典添加其他值?

5 shell mongodb mongo-shell

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

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

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

mik*_*eho 9

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

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

工作得很好.

但是,如果要将值或子文档添加到字典,则可以使用该$set命令.以此文档为例:

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": 5,
        "bananas": 10
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

您的文档将如下所示:

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": 5,
        "bananas": 10,
        "apples: 2
    }
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": {
            "yellow": 5,
            "white": 3
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们插入4个格兰尼史密斯苹果和8个富士苹果.

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

我们的文件现在是:

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": {
            "yellow": 5,
            "white": 3
        },
        "apples": {
            "fuji": 8,
            "granny smith": 4
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*hta -3

对于像这样的对象:

{
  name: "Hello, world!",
  content: "This is my first post"
}
Run Code Online (Sandbox Code Playgroud)

如果你现在跑

db.posts.update({name: "Hello, world!"}, {name: "First post"});
Run Code Online (Sandbox Code Playgroud)

这就是结果:

{
  title: "First post"
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果要将数据附加到数组,则使用 $push。如果它是一个普通字段,请使用 $set。

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