MongoDB-更新文档
时间:2020-02-23 14:40:52 来源:igfitidea点击:
在本MongoDB教程中,我们将学习更新文档。
登录到您的MongoDB服务器并插入以下文档。
对于本教程,我将把文档插入订阅集合中。
> db.subscription.insertMany([
{
"firstname": "John",
"lastname": "Doe",
"uid": 1,
"accountstatus": "ACTIVE",
"plan": "TRIAL15DAYS",
"modifiedAt": null,
"createdAt": new Date()
},
{
"firstname": "Jane",
"lastname": "Doe",
"uid": 2,
"accountstatus": "ACTIVE",
"plan": "PLAN30DAYS",
"modifiedAt": null,
"createdAt": new Date()
},
{
"firstname": "Jim",
"lastname": "Doe",
"uid": 3,
"accountstatus": "SUSPENDED",
"plan": "PLAN60DAYS",
"modifiedAt": null,
"createdAt": new Date()
},
{
"firstname": "Alice",
"lastname": "Doe",
"uid": 4,
"accountstatus": "ACTIVE",
"plan": "PLAN1YEAR",
"modifiedAt": null,
"createdAt": new Date()
}
])
注意!我们使用new Date()将createdAt设置为当前日期时间。
更新一份文件
要更新单个文档,我们使用updateOne方法。
语法
db.collectionName.updateOne(filter, update)
其中,filter是获取所需文档的条件,而更新是我们要更新的文档的一部分。
在以下示例中,我们将" uid"等于" 3"的用户的帐户状态从"已暂停"更新为"活动"。
> db.subscription.updateOne(
{ "uid": 3 },
{
$set: { "accountstatus": "ACTIVE" },
$currentDate: { "modifiedAt": true }
}
)
我们使用$set操作符来更新accountstatus的值。
我们使用$currentDate运算符将ModifyedAt设置为当前日期。
如果现在获取上述文档,我们将获得以下内容。
> db.subscription.find({ "uid": 3 }).pretty()
{
"_id" : ObjectId("5d7715d5b385796f53d4c8ff"),
"firstname" : "Jim",
"lastname" : "Doe",
"uid" : 3,
"accountstatus" : "ACTIVE",
"plan" : "PLAN60DAYS",
"modifiedAt" : ISODate("2019-09-10T03:18:42.406Z"),
"createdAt" : ISODate("2019-09-10T03:17:41.130Z")
}
如果不存在,则使用updateOne方法插入新文档
我们可以使用updateOne方法来更新现有文档,如果不存在,还可以插入新文档。
语法
db.collectionName.updateOne(filter, update, option)
在选项中,将" upsert"设置为" true"。
如果不存在,这将有助于插入新文档。
在下面的示例中,我们使用updateOne方法在subscription集合中插入一个新文档。
> db.subscription.updateOne(
{ "uid": 5 },
{
$set: {
"firstname": "Bob",
"lastname": "Doe",
"uid": 5,
"accountstatus": "ACTIVE",
"plan": "PLAN1YEAR",
"modifiedAt": null,
"createdAt": new Date()
}
},
{
upsert: true
}
)
如果现在获取新插入的文档,我们将得到以下结果。
> db.subscription.find({ "uid": 5 }).pretty()
{
"_id" : ObjectId("5d771bc30a7168b744863bc6"),
"uid" : 5,
"accountstatus" : "ACTIVE",
"createdAt" : ISODate("2019-09-10T03:42:59.876Z"),
"firstname" : "Bob",
"lastname" : "Doe",
"modifiedAt" : null,
"plan" : "PLAN1YEAR"
}
更新多个文件
要更新多个文档,我们使用updateMany方法。
在以下示例中,我们将针对uid 2、3和4的计划更新为PLAN60DAYS。
> db.subscription.updateMany(
{ "uid": { $in: [2, 3, 4] } },
{
$set: { "plan": "PLAN60DAYS" },
$currentDate: { "modifiedAt": true }
}
)
在MongoDB-查询文档教程中学习使用$in和其他运算符过滤文档。
替换一份文件
我们使用replaceOne方法来替换文档中除'_id'之外的全部内容。
在下面的示例中,我们将替换uid等于5的文档的内容。
> db.subscription.replaceOne(
{ "uid": 5 },
{
"firstname": "Bob",
"lastname": "Doe",
"uid": 5,
"accountstatus": "ACTIVE",
"plan": "PLAN90DAYS",
"modifiedAt": new Date(),
"createdAt": new Date()
}
)
如果将新文档不存在,我们也可以使用replaceOne方法来插入新文档,方法是将upsert选项设置为true。
> db.subscription.replaceOne(
{ "uid": 6 },
{
"firstname": "Billy",
"lastname": "Doe",
"uid": 6,
"accountstatus": "ACTIVE",
"plan": "PLAN90DAYS",
"modifiedAt": new Date(),
"createdAt": new Date()
},
{
upsert: true
}
)

