使用 MongoDB CRUD 注入数据
我们将使用你在上一节中学到的 MongoDB CRUD 操作,在 nuxt-app 数据库中注入一些数据。
插入文档
我们可以使用 insertOne 或 insertMany 方法插入新的文档,如下所示:
-
插入单个文档: 我们可以像这样插入一个新文档:
> db.<collection>.insertOne(<document>)
让我们使用以下代码插入一个文档:
db.user.insertOne( { name: "Alexandre", age: 30, slug: "alexandre", role: "admin", status: "ok" } )你应该得到类似于以下的结果:
{ "acknowledged" : true, "insertedId" : ObjectId("5ca...") } -
插入多个文档: 我们可以像这样插入多个新文档:
> db.<collection>.insertMany([<document>,<document>,<document>,...])
让我们使用以下代码插入两个文档:
> db.user.insertMany([ { name: "Pooya", age: 25, slug: "pooya", role: "admin", status: "ok" }, { name: "Sébastien", age: 22, slug: "sebastien", role: "writer", status: "pending" } ])你应该得到类似于以下的结果:
{ "acknowledged" : true, "insertedIds" : [ ObjectId("5ca..."), ObjectId("5ca...") ] }
在向 user 集合添加文档之后,我们希望获取它们,这可以通过下一节中的读取操作简单地完成。
查询文档
我们可以使用 find 方法获取文档,如下所示:
-
选择集合中的所有文档: 我们可以像这样从一个集合中获取所有文档:
> db.<collection>.find()
此操作与以下
SQL语句相同:SELECT * FROM <table>让我们如下获取
user集合中的所有文档:> db.user.find()
你应该得到类似于以下的结果:
{ "_id" : ObjectId("5ca..."), "name" : "Alexandre", "slug" : "alexandre", ... } { "_id" : ObjectId("5ca..."), "name" : "Pooya", "slug" : "pooya", ... } { "_id" : ObjectId("5ca..."), "name" : "Sébastien", "slug" : "sebastien", ... } -
指定相等条件: 我们可以像这样从一个集合中获取特定的文档:
> db.<collection>.find(<query>, <projection>)
你可以看到,我们使用与前一个示例相同的
find方法,但在<query>参数中传入选项以过滤与特定查询匹配的文档。例如,以下行选择status等于ok的文档:> db.user.find( { status: "ok" } )此操作与以下
SQL语句相同:SELECT * FROM user WHERE status = "ok"你应该得到类似于以下的结果:
{ "_id" : ObjectId("5ca..."), "name" : "Alexandre", ... "status" : "ok" } { "_id" : ObjectId("5ca..."), "name" : "Pooya", ... "status" : "ok" } -
使用查询操作符指定条件: 我们还可以在
find方法的<query>参数中使用MongoDB查询选择器,例如$eq、$gt或$in。例如,以下行获取status等于ok或pending的文档:> db.user.find( { status: { $in: [ "ok", "pending" ] } } )此操作与以下
SQL语句相同:SELECT * FROM user WHERE status in ("ok", "pending") -
指定
AND条件: 你还可以将过滤器与查询选择器混合使用。例如,以下行获取status等于ok且age小于($lt) 30的文档:> db.user.find( { status: "ok", age: { $lt: 30 } } )你应该得到类似于以下的结果:
{ "_id" : ObjectId("5ca..."), "name" : "Pooya", "age" : 25, ... }此操作与以下
SQL语句相同:SELECT * FROM user WHERE status = "ok" AND age < 30 -
指定
OR条件: 你还可以使用$or选择器创建OR条件,以获取至少满足一个条件的文档。例如,以下行获取status等于ok或age小于($lt) 30的文档:> db.user.find( { $or: [ { status: "ok" }, { age: { $lt: 30 } } ] } )此操作与以下
SQL语句相同:SELECT * FROM user WHERE status = "ok" OR age < 30你应该得到类似于以下的结果:
{ "_id" : ObjectId("5ca..."), "name" : "Pooya", "age" : 25, ... }你可以在 https://www.google.com/search?q=https://docs.mongodb.com/manual/reference/operator/query/ 找到有关查询和投影操作符的更多信息,以及在 https://www.google.com/search?q=https://docs.mongodb.com/manual/reference/operator/query/logical 找到有关
$or选择器的更多信息。
现在,我们感兴趣的下一件事是更新现有文档,所以让我们继续下一节。
更新文档
我们可以使用 updateOne 和 updateMany 方法更新现有文档,如下所示:
-
更新单个文档:
我们可以像这样更新一个现有文档:
> db.<collection>.updateOne(<filter>, <update>, <options>)
让我们使用
<update>参数中的$set操作符,更新<filter>参数中name等于 "Sébastien" 的文档,如下所示:> db.user.updateOne( { name: "Sébastien" }, { $set: { status: "ok" }, $currentDate: { lastModified: true } } )你应该得到以下结果:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }$set操作符用于将字段的值替换为新值。它的格式如下:{ $set: { <field1>: <value1>, ... } }$currentDate操作符用于将字段的值设置为当前日期。它返回的值可以是人类可读的日期(默认),例如 2013-10-02T01:11:18.965Z,也可以是时间戳,例如 1573612039。你可以在 https://www.google.com/search?q=https://docs.mongodb.com/manual/reference/operator/update/set/ 找到关于
$set操作符的更多信息。你可以在 https://www.google.com/search?q=https://docs.mongodb.com/manual/reference/operator/update/currentDate/ 找到关于$currentDate的更多信息。 -
更新多个文档:
我们可以像这样更新多个现有文档:
> db.<collection>.updateMany(<filter>, <update>, <options>)
让我们更新
status为ok的文档:> db.user.updateMany( { "status": "ok" }, { $set: { status: "pending" }, $currentDate: { lastModified: true } } )你应该得到以下结果:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 } -
替换文档:
我们可以像这样替换现有文档的内容(
_id字段除外):> db.<collection>.replaceOne(<filter>, <replacement>, <options>)
让我们使用
<replacement>参数中的一个全新的文档替换name等于 "Pooya" 的文档,如下所示:> db.user.replaceOne( { name: "Pooya" }, { name: "Paula", age: "31", slug: "paula", role: "admin", status: "ok" } )你应该得到以下结果:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
在学习了如何更新现有文档之后,接下来你应该学习的是如何删除现有文档。让我们深入下一节。
删除文档
我们可以使用 deleteOne 和 deleteMany 方法删除现有文档,如下所示:
-
删除符合条件的单个文档:
我们可以像这样删除一个现有文档:
> db.<collection>.deleteOne(<filter>, <options>)
让我们删除
status字段等于pending的文档,如下所示:> db.user.deleteOne( { status: "pending" } )你应该得到以下结果:
{ "acknowledged" : true, "deletedCount" : 3 } -
删除符合条件的多个文档:
我们可以像这样删除多个现有文档:
> db.<collection>.deleteMany(<filter>, <options>)
让我们删除
status字段等于ok的文档:> db.user.deleteMany({ status : "ok" })你应该得到以下结果:
{ "acknowledged" : true, "deletedCount" : 2 } -
删除所有文档:
我们可以通过向
deleteMany方法传递一个空过滤器来删除集合中的所有文档,如下所示:> db.<collection>.deleteMany({})让我们使用以下代码删除
user集合中的所有文档:> db.user.deleteMany({})你应该得到以下结果:
{ "acknowledged" : true, "deletedCount" : 1 }
做得好!你已经成功完成了这些章节中的 MongoDB CRUD 操作。你可以在 https://www.google.com/search?q=https://docs.mongodb.com/manual/reference/method/js-collection/ 找到更多其他方法。在下一节中,我们将指导你如何使用 MongoDB 驱动程序将 CRUD 操作与服务器端框架集成。让我们开始吧。