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 } )