以下是我正在尝试做的一个例子,因为我无法解释我的意思。
我在mongo CLI中执行此操作:db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []})
。我想要做的是更新该条目以向comments
字典添加评论。
如何使用db.posts.update()
实现此目的?
答案 0 :(得分:9)
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
命令覆盖。
答案 1 :(得分:-2)
对于像这样的对象:
{
name: "Hello, world!",
content: "This is my first post"
}
如果你现在运行
db.posts.update({name: "Hello, world!"}, {name: "First post"});
这就是结果:
{
title: "First post"
}
由于没有提供替换值,因此将删除content属性。 我提到这是因为这是一个常见的错误。
因此,如果您想“添加”某个属性,则需要运行:
db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}});
如果要将数据附加到数组,则使用$ push。如果它是普通字段,则使用$ set。