使用 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
操作与服务器端框架集成。让我们开始吧。