我不确定我是否在问正确的问题,但我认为这只是一个基本的mongodb
问题。
我目前有这个:
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "test@gmail.com",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2"
}
我想添加一个这样的运动对象:
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "test@gmail.com",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises": {
"benchpress",
"rows",
"curls",
}
我只是不确定如何使用对象创建练习而不使用只打开数组的$push
。我不想要一个数组,我想要一个对象。
任何帮助都会非常感激。
答案 0 :(得分:1)
object
是一个键值对。在第二个文档的表示中,您将嵌套文档exercises
作为键,其值作为仅包含字符串的对象。难道你没有看到奇怪的东西吗?没有键的对象?
它可能应该是array
个字符串。请注意,array
确实是object
,其中键是从0开始的数字索引,值是该位置的string
。
(你有一个额外的逗号和一个丢失的curly-brace
。让我们解决这个问题。)
这是我们希望在更新文档后看到的文件。
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "test@gmail.com",
"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" : "test@gmail.com",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises" : [
"benchpress",
"rows",
"curls"
]
}
这里scratch是指集合名称。 update
方法有3个参数。
upsert
)时插入记录或更新符合条件的多个文档(multiple
)。<强> EXTRA 强>
警告:如果在mongo shell中执行以下操作,
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/