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 命令覆盖。