object
是一个键值对。在第二个文档的表示中,嵌套文档exercises
作为键和它的值作为仅包含字符串的对象。你没看到有什么奇怪的东西吗?没有键的对象?
它应该可能是字符串的array
。请注意,array
确实是object
,其中密钥是从0开始的数字索引,值是该位置的string
。
(您有一个逗号和一个缺少的curly-brace
。让我们修复该问题。) 这是我们希望在更新文档后看到的文档。
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "[email protected]",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises": [
"benchpress",
"rows",
"curls"
]
}
现在,回到你的问题。我们如何使用练习文件更新现有文件?它非常简单。 Mongodb有一个'更新'方法,正是这样做。由于我们不想替换整个文档并只添加其他字段,因此我们应该使用$set
来更新特定字段。启动mongo shell并使用use db-name
切换到您的数据库。然后执行以下命令。我假设你有一个id
ObjectId(“57af98d4d71c4efff5304335”)的现有文档。请注意,ObjectId是一个BSON
数据类型。
db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, { $set: {"exercises": ["benchpress", "rows", "curls"] } })
这将更新文档
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "[email protected]",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises" : [
"benchpress",
"rows",
"curls"
]
}
这里划伤指的是集合名称。 update
方法需要3个参数。
- 查询找到更新
- 更新参数(文档更新)的文件。您可以替换整个文档或仅替换文档的特定部分(使用$ set)。
- 一个可选对象,可告诉Mongodb在文档不存在的情况下插入记录(
upsert
)或更新符合条件的多个文档(multiple
)。
EXTRA
警告:如果您执行在蒙戈外壳下面,
db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, {"exercises": ["benchpress", "rows", "curls"] })
整个文档会除了_id
现场进行更换。因此,该记录将如下所示:
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"exercises" : [
"benchpress",
"rows",
"curls"
]
}
您应该只在知道后果时执行此操作。
希望这会有所帮助。
欲了解更多信息,请参阅https://docs.mongodb.com/manual/reference/method/db.collection.update/