使用 MongoDB CRUD 注入数据

我们将使用你在上一节中学到的 MongoDB CRUD 操作,在 nuxt-app 数据库中注入一些数据。

插入文档

我们可以使用 insertOneinsertMany 方法插入新的文档,如下所示:

  • 插入单个文档: 我们可以像这样插入一个新文档:

    > 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 等于 okpending 的文档:

    > db.user.find( { status: { $in: [ "ok", "pending" ] } } )

    此操作与以下 SQL 语句相同:

    SELECT * FROM user WHERE status in ("ok", "pending")
  • 指定 AND 条件: 你还可以将过滤器与查询选择器混合使用。例如,以下行获取 status 等于 okage 小于 ($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 等于 okage 小于 ($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 选择器的更多信息。

现在,我们感兴趣的下一件事是更新现有文档,所以让我们继续下一节。

更新文档

我们可以使用 updateOneupdateMany 方法更新现有文档,如下所示:

  • 更新单个文档:

    我们可以像这样更新一个现有文档:

    > 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。

  • 更新多个文档:

    我们可以像这样更新多个现有文档:

    > db.<collection>.updateMany(<filter>, <update>, <options>)

    让我们更新 statusok 的文档:

    > db.user.updateMany(
        { "status": "ok" },
        {
            $set: { status: "pending" },
            $currentDate: { lastModified: true }
        }
    )

    你应该得到以下结果:

    { "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

    你可以在 https://www.google.com/search?q=https://docs.mongodb.com/manual/reference/operator/update/ 找到关于更新操作符的更多信息。

  • 替换文档:

    我们可以像这样替换现有文档的内容( _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 }

在学习了如何更新现有文档之后,接下来你应该学习的是如何删除现有文档。让我们深入下一节。

删除文档

我们可以使用 deleteOnedeleteMany 方法删除现有文档,如下所示:

  • 删除符合条件的单个文档:

    我们可以像这样删除一个现有文档:

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