BeginnersBook-MongoDB-教程-一-

BeginnersBook MongoDB 教程(一)

原文:BeginnersBook

协议:CC BY-NC-SA 4.0

MongoDB 插入文档

原文: https://beginnersbook.com/2017/09/mongodb-insert-document/

在本教程中,我们将了解如何将文档插入集合中。我们将在多个示例的帮助下理解这一点。

将文档插入集合的语法:

db.collection_name.insert()

让我们举一个例子来理解这一点。

MongoDB 使用insert()插入文档示例

这里我们将文档插入名为beginnersbook的集合中。下面示例中的字段course是一个包含多个键值对的数组。

db.beginnersbook.insert(  
   {  
     name: "Chaitanya",  
     age: 30,
     email: "[email protected]",
     course: [ { name: "MongoDB", duration: 7 }, { name: "Java", duration: 30 } ]
   }  
)

您应该看到一条成功的写消息,如下所示:

WriteResult({ "nInserted" : 1 })

如果集合不存在,则insert()方法创建集合,但如果集合存在,则将文档插入其中

MongoDB Insert Document

验证:

您还可以通过键入以下命令验证文档是否已成功插入:

db.collection_name.find()

在上面的示例中,我们将文档插入名为beginnersbook的集合中,因此命令应为:

> db.beginnersbook.find()
{ "_id" : ObjectId("59bce797668dcce02aaa6fec"), "name" : "Chaitanya", "age" : 30, 
"email" : "[email protected]", "course" : [ { "name" : "MongoDB", 
"duration" : 7 }, { "name" : "Java", "duration" : 30 } ] }

MongoDB 示例:在集合中插入多个文档

要在集合中插入多个文档,我们定义一个文档数组,稍后我们在数组变量上使用insert()方法,如下例所示。这里我们在名为students的集合中插入三个文档。此命令将在students集合中插入数据,如果集合不存在,则它将创建集合并插入这些文档。

var beginners =
 [
    {
	"StudentId" : 1001,
	"StudentName" : "Steve",
        "age": 30
    },
    {
	"StudentId" : 1002,
	"StudentName" : "Negan",
        "age": 42
    },
    {
	"StudentId" : 3333,
	"StudentName" : "Rick",
        "age": 35
    },
];
db.students.insert(beginners);

你会看到这个输出:

BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 3,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})

如您所见,它在nInserted前面显示数字 3。这意味着此命令已插入 3 个文档。

MongoDB Insert multiple Documents

验证文档是否在集合中。运行此命令:

db.students.find()

你知道吗? 您可以以 JSON 格式打印输出数据,以便您可以轻松阅读。要以 JSON 格式打印数据,请运行命令db.collection_name.find().forEach(printjson)

所以在我们的例子中命令是这样的:

db.students.find().forEach(printjson)

在下面的屏幕截图中,您可以看到差异。首先,我们使用普通的find()方法打印文档,然后使用 JSON 格式打印相同集合的文档。 JSON 格式的文档简洁易读。

Printing documents in JSON format

我们还可以使用 MongoDB 2.6 中引入的 New Bulk API 插入多个文档。我们将在 Bulk API 教程中了解到这一点。

MongoDB 使用find()方法查询文档

原文: https://beginnersbook.com/2017/09/mongodb-query-document-using-find-method/

在我之前的教程中,我使用find()方法查询集合中的所有文档。在本教程中,我们将看到find()方法的用法,以根据给定的条件查询集合中的文档。让我们开始吧。

以 JSON 格式查询所有文档

假设我们在名为beginnersbookdb的数据库中有一个集合students。要获取所有文档,我们使用此命令:

db.students.find()

但是,我们获得的输出不是任何格式且不太可读。为了提高可读性,我们可以使用以下命令格式化 JSON 格式的输出:

db.students.find().forEach(printjson);

或者只是使用pretty() - 它做同样的事情。

db.students.find().pretty()

正如您在下面的屏幕截图中看到的那样,文档是 JSON 格式的。

MongoDB query document in JSON format

根据条件查询文档

我们可以根据条件获取所选文档,而不是从集合中获取所有文档。

相等判断:

例如:我想从学生集合中获取"Steve"的数据。这个命令应该是:

db.students.find({StudentName : "Steve"}).pretty()

此命令返回与给定条件匹配的文档。

MongoDB Query Document Equality Criteria

大于判断:

语法:

db.collection_name.find({"field_name":{$gt:criteria_value}}).pretty()

例如:我想获取年龄> 32的学生的详细信息,那么查询应该是:

db.students.find({"age":{$gt:32}}).pretty()

我有两个符合条件的文档,如下面的屏幕截图所示:

MongoDB Query Document GreaterThan Criteria

小于判断:

语法:

db.collection_name.find({"field_name":{$lt:criteria_value}}).pretty()

示例:查找 ID 小于 3000 的所有学生。此判断的命令为:

db.students.find({"StudentId":{$lt:3000}}).pretty()

输出:

> db.students.find({"StudentId":{$lt:3000}}).pretty()
{
        "_id" : ObjectId("59bcecc7668dcce02aaa6fed"),
        "StudentId" : 1001,
        "StudentName" : "Steve",
        "age" : 30
}
{
        "_id" : ObjectId("59bcecc7668dcce02aaa6fee"),
        "StudentId" : 1002,
        "StudentName" : "Negan",
        "age" : 42
}

不等于判断:

语法:

db.collection_name.find({"field_name":{$ne:criteria_value}}).pretty()

示例:查找 id 不等于 1002 的所有学生。此条件的命令为:

db.students.find({"StudentId":{$ne:1002}}).pretty()

判断:

> db.students.find({"StudentId":{$ne:1002}}).pretty()
{
        "_id" : ObjectId("59bcecc7668dcce02aaa6fed"),
        "StudentId" : 1001,
        "StudentName" : "Steve",
        "age" : 30
}
{
        "_id" : ObjectId("59bcecc7668dcce02aaa6fef"),
        "StudentId" : 3333,
        "StudentName" : "Rick",
        "age" : 35
}

以下是另外两个判断:

大于等于判断:

db.collection_name.find({"field_name":{$gte:criteria_value}}).pretty()

小于等于判断:

db.collection_name.find({"field_name":{$lte:criteria_value}}).pretty()

我们在所有命令末尾添加的pretty()方法不是必需的。它仅用于格式化目的。

MongoDB - 更新集合中的文档

原文: https://beginnersbook.com/2017/09/mongodb-update-document/

在 MongoDB 中,我们有两种方法来更新集合中的文档。1)update()方法,2)save()方法。虽然这两种方法都更新了现有文档,但它们正在不同的场景中使用。当我们需要更新现有文档的值时使用update()方法,而save()方法用于将现有文档替换为已在其中传递的文档。

要更新 MongoDB 中的文档,我们在命令中提供条件,并更新与该条件匹配的文档。要了解标准在 MongoDB 命令中的工作方式,请参阅上一个教程: MongoDB 查询文档

使用update()方法更新文档

语法:

db.collection_name.update(criteria, update_data)

示例:

例如:假设我在数据库beginnersbookdb中有一个名为got的集合。got里面的文档是:

> db.got.find().pretty()
{
        "_id" : ObjectId("59bd2e73ce524b733f14dd65"),
        "name" : "Jon Snow",
        "age" : 32
}
{
        "_id" : ObjectId("59bd2e8bce524b733f14dd66"),
        "name" : "Khal Drogo",
        "age" : 36
}
{
        "_id" : ObjectId("59bd2e9fce524b733f14dd67"),
        "name" : "Sansa Stark",
        "age" : 20
}
{
        "_id" : ObjectId("59bd2ec5ce524b733f14dd68"),
        "name" : "Lord Varys",
        "age" : 42
}

现在假设我想更新名为“Kit Harington”的 Jon Snow 的名字。对此的命令是:

db.got.update({"name":"Jon Snow"},{$set:{"name":"Kit Harington"}})

输出:

MongoDB Update Document

如您所见,该文档已更新。

你知道吗? 默认情况下,更新方法更新单个文档。在上面的示例中,我们只有一个文档与条件匹配,但是如果有更多文档,那么也只会更新一个文档。要启用 update()方法来更新多个文档,您必须将此方法的“multi”参数设置为 true,如下所示。

使用 update()方法更新多个文档:

db.got.update({"name":"Jon Snow"},
 {$set:{"name":"Kit Harington"}},{multi:true})

使用 save()方法更新文档

语法:

db.collection_name.save( {_id:ObjectId(), new_document} )

让我们采用我们在上面看到的相同的例子。现在我们要将Kit Harington的名称更新为Jon Snow。要使用save()方法,您应该知道该文档的唯一_id字段。

一个非常重要的注意事项是当你在使用save()方法时不提供_id字段时,它调用insert()方法并插入传递的文档作为新文档进入集合

要获取文档的_id,可以键入以下命令:

db.got.find().pretty()

这里有一个集合名称。这种查找唯一_id的方法仅在您拥有少量文档时才有用,否则在大量文档中滚动和搜索该_id是很繁琐的。

如果您有大量文档,那么要获取特定文档的_id,请使用find()方法中的条件。例如:要使用save()方法获取要更新的文档的_id,请键入以下命令:

> db.got.find({"name": "Kit Harington"}).pretty()
{
        "_id" : ObjectId("59bd2e73ce524b733f14dd65"),
        "name" : "Kit Harington",
        "age" : 32
}

现在我们知道该文档的唯一_id字段。让我们使用save()方法编写命令。

> db.got.save({"_id" : ObjectId("59bd2e73ce524b733f14dd65"), "name":
 "Jon Snow", "age": 30})
>

你应该看到这个输出:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

验证更新:

MongoDB save() method to update document

MongoDB 从集合中删除文档

原文: https://beginnersbook.com/2017/09/mongodb-delete-document/

在本教程中,我们将学习如何从集合中删除文档。remove()方法用于从 MongoDB 中的集合中删除文档。

remove()方法的语法:

db.collection_name.remove(delete_criteria)

要了解如何在 MongoDB 命令中指定条件,请参阅本教程: MongoDB 查询文档

使用remove()方法删除文档

假设我的 MongoDB 数据库中有一个名为beginnersbookdb的集合studentsstudents集合中的文档是:

> db.students.find().pretty()
{
        "_id" : ObjectId("59bcecc7668dcce02aaa6fed"),
        "StudentId" : 1001,
        "StudentName" : "Steve",
        "age" : 30
}
{
        "_id" : ObjectId("59bcecc7668dcce02aaa6fef"),
        "StudentId" : 3333,
        "StudentName" : "Rick",
        "age" : 35
}

现在我想删除这个学生 ID 等于 3333 的学生。要做到这一点,我会使用remove()方法编写一个命令,如下所示:

db.students.remove({"StudentId": 3333})

输出:

WriteResult({ "nRemoved" : 1 })

验证文档是否实际删除。键入以下命令:

db.students.find().pretty()

它将列出学生集合的所有文档。

以下是上述所有步骤的屏幕截图:

MongoDB Delete Document

如何只删除一个符合条件的文档?

当集合中存在多个符合条件的文档时,如果运行remove命令,则将删除所有这些文档。但是,有一种方法可以将删除限制为仅一个文档,这样即使有更多文档符合删除条件,也只会删除一个文档。

db.collection_name.remove(delete_criteria, justOne)

这里justOne是一个布尔参数,只取 1 和 0,如果你给 1,那么它会将文档删除限制为只有 1 个文档。这是一个可选参数,如上所述,我们使用remove()方法而不使用此参数。

例如,我在集合中有以下记录。

> db.walkingdead.find().pretty()
{
        "_id" : ObjectId("59bf280cb8e797a22c654229"),
        "name" : "Rick Grimes",
        "age" : 32,
        "rname" : "Andrew Lincoln"
}
{
        "_id" : ObjectId("59bf2851b8e797a22c65422a"),
        "name" : "Negan",
        "age" : 35,
        "rname" : "Jeffrey Dean Morgan"
}
{
        "_id" : ObjectId("59bf28a5b8e797a22c65422b"),
        "name" : "Daryl Dixon",
        "age" : 32,
        "rname" : "Norman Reedus"
}

假设我想删除年龄等于 32 的文档。此集合中有两个文档符合此条件。但是,为了将删除限制为 1,我们将justOne参数设置为true

db.walkingdead.remove({"age": 32}, 1)

输出:如您所见,只有一个文档被删除。

WriteResult({ "nRemoved" : 1 })

Deleting only one document MongoDB

删除所有文档

如果要从集合中删除所有文档但不想删除集合本身,则可以使用remove()方法,如下所示:

db.collection_name.remove({})

如果您想删除该集合以及所有文档,请参阅本指南:MongoDB 删除集合

MongoDB 投影

原文: https://beginnersbook.com/2017/09/mongodb-projection/

在之前的教程中,我们学习了如何在查询文档时使用条件来从集合中获取所选文档。在本教程中,我们将学习 MongoDB 的另一个有趣话题,即 MongoDB 投影。当我们想要获取文档的选定字段而不是所有字段时使用。

例如,我们有一个集合,其中存储了包含以下字段的文档:student_namestudent_idstudent_age但我们只想查看所有学生的student_id,那么在这种情况下我们可以使用投影来获取student_id

语法:

db.collection_name.find({},{field_key:1 or 0})

现在不要担心语法,我们将看到一个例子来理解这一点。

MongoDB 投影示例

让我们举一个例子来理解 MongoDB 中的投影。我们有一个名为studentdata的集合,其中包含以下文档。

> db.studentdata.find().pretty()
{
        "_id" : ObjectId("59bf63380be1d7770c3982af"),
        "student_name" : "Steve",
        "student_id" : 2002,
        "student_age" : 22
}
{
        "_id" : ObjectId("59bf63500be1d7770c3982b0"),
        "student_name" : "Carol",
        "student_id" : 2003,
        "student_age" : 22
}
{
        "_id" : ObjectId("59bf63650be1d7770c3982b1"),
        "student_name" : "Tim",
        "student_id" : 2004,
        "student_age" : 23
}

要仅获取所有文档的 student_id,我们将使用以下投影:

> db.studentdata.find({}, {"_id": 0, "student_id": 1})
{ "student_id" : 2002 }
{ "student_id" : 2003 }
{ "student_id" : 2004 }

MongoDB Projection Example

值 1 表示显示字段,0 表示不显示该字段。当我们在投影中将字段设置为 1 时,除了_id之外,其他字段会自动设置为 0,因此为了避免_id,我们需要在投影中将其专门设置为 0。反之亦然,当我们将少数字段设置为 0,其他字段自动设置为 1 时(参见下面的示例)

另一种做同样事情的方法:

> db.studentdata.find({}, {"_id": 0, "student_name": 0, "student_age": 0})
{ "student_id" : 2002 }
{ "student_id" : 2003 }
{ "student_id" : 2004 }

重要提示:

有些人在查询中使用投影时可能会收到此错误:

Error: error: {
  "ok" : 0,
  "errmsg" : "Projection cannot have a mix of inclusion and exclusion.",
  "code" : 2,
  "codeName" : "BadValue"
}

当您将某些字段设置为 0 而其他字段设置为 1 时会发生这种情况,换句话说,您将混合包含和排除组合在一起,唯一的例外是_id字段。例如:以下查询将产生此错误:

db.studentdata.find({}, {"_id": 0, "student_name": 0, "student_age": 1})

这是因为我们将student_name设置为 0,将其他字段student_age设置为 1。我们不能混用这些。您可以将不想显示的字段设置为 0,或将字段设置为 1 以显示。

MongoDB - limit()skip()方法

原文: https://beginnersbook.com/2017/09/mongodb-limit-and-skip-method/

在本教程中,我们将学习如何在 MongoDB 查询中使用limit()skip()方法。

MongoDB 中的limit()方法

此方法限制响应特定查询而返回的文档数。

语法:

db.collection_name.find().limit(number_of_documents)

让我们举一个例子来了解如何使用这种方法。可以说,我有一个集合studentdata,其中包含以下文档:

> db.studentdata.find().pretty()
{
        "_id" : ObjectId("59bf63380be1d7770c3982af"),
        "student_name" : "Steve",
        "student_id" : 2002,
        "student_age" : 22
}
{
        "_id" : ObjectId("59bf63500be1d7770c3982b0"),
        "student_name" : "Carol",
        "student_id" : 2003,
        "student_age" : 22
}
{
        "_id" : ObjectId("59bf63650be1d7770c3982b1"),
        "student_name" : "Tim",
        "student_id" : 2004,
        "student_age" : 23
}

让我们说我想找出所有ID > 2002的学生的名单,我会用一个判断写一个这样的查询:

要了解在查询文档时如何指定条件,请阅读: MongoDB 查询文档

db.studentdata.find({student_id : {$gt:2002}}).pretty()

MongoDB limit method in Query

使用limit()方法限制结果中的文档:

让我说我不希望所有符合条件的文档。我只想选择一些文档,然后我可以使用limit()方法来限制文档的数量。例如,如果我只想输出一个文档,那么我会这样做:

> db.studentdata.find({student_id : {$gt:2002}}).limit(1).pretty()
{
        "_id" : ObjectId("59bf63500be1d7770c3982b0"),
        "student_name" : "Carol",
        "student_id" : 2003,
        "student_age" : 22
}

MongoDB skip()方法

skip()方法用于在查询结果中跳过给定数量的文档。

要理解skip()方法的使用,让我们采用上面我们看到的相同示例。在上面的例子中,我们可以看到,通过使用limit(1),我们设法只获得一个文档,这是第一个与给定条件匹配的文档。如果您不希望第一个文档符合您的条件,该怎么办?例如,我们有两个文档,其student_id值大于 2002 但是当我们使用limit(1)将结果限制为 1 时,我们得到了第一个文档,为了得到符合此条件的第二个文档,我们可以使用skip(1),这里将跳过第一份文档。

不使用skip()

> db.studentdata.find({student_id : {$gt:2002}}).limit(1).pretty()
{
        "_id" : ObjectId("59bf63500be1d7770c3982b0"),
        "student_name" : "Carol",
        "student_id" : 2003,
        "student_age" : 22
}

使用skip

> db.studentdata.find({student_id : {$gt:2002}}).limit(1).skip(1).pretty()
{
        "_id" : ObjectId("59bf63650be1d7770c3982b1"),
        "student_name" : "Tim",
        "student_id" : 2004,
        "student_age" : 23
}

MongoDB sort()方法

原文: https://beginnersbook.com/2017/09/mongodb-sort-method/

在本教程中,我们将学习如何使用sort()方法对文档进行排序。

使用sort()方法对文档进行排序

使用sort()方法,您可以根据文档的特定字段按升序或降序对文档进行排序。

sort()方法的语法:

db.collecttion_name.find().sort({field_key:1 or -1})

1 表示升序,-1 表示降序。默认值为 1。

例如:集合studentdata包含以下文档:

> db.studentdata.find().pretty()
{
        "_id" : ObjectId("59bf63380be1d7770c3982af"),
        "student_name" : "Steve",
        "student_id" : 2002,
        "student_age" : 22
}
{
        "_id" : ObjectId("59bf63500be1d7770c3982b0"),
        "student_name" : "Carol",
        "student_id" : 2003,
        "student_age" : 22
}
{
        "_id" : ObjectId("59bf63650be1d7770c3982b1"),
        "student_name" : "Tim",
        "student_id" : 2004,
        "student_age" : 23
}

假设我想以降序显示所有文档的student_id

要仅显示特定的文档字段,我使用的是 MongoDB 投影

> db.studentdata.find({}, {"student_id": 1, _id:0}).sort({"student_id": -1})
{ "student_id" : 2004 }
{ "student_id" : 2003 }
{ "student_id" : 2002 }

要以升序显示所有学生的student_id字段:

> db.studentdata.find({}, {"student_id": 1, _id:0}).sort({"student_id": 1})
{ "student_id" : 2002 }
{ "student_id" : 2003 }
{ "student_id" : 2004 }

默认值:默认为升序,所以如果我在sort()方法中没有提供任何值,那么它将按升序对记录进行排序,如下所示:

> db.studentdata.find({}, {"student_id": 1, _id:0}).sort({})
{ "student_id" : 2002 }
{ "student_id" : 2003 }
{ "student_id" : 2004 }

您还可以根据您不想显示的字段对文档进行排序:例如,您可以根据student_id对文档进行排序,并显示student_agestudent_name字段。

MongoDB Sort Documents

MongoDB 索引教程

原文: https://beginnersbook.com/2017/09/mongodb-indexing-tutorial-with-example/

MongoDB 中的索引是一种特殊的数据结构,它保存创建索引的少量文档字段的数据。索引提高了数据库中搜索操作的速度,因为不是搜索整个文档,而是对仅包含少量字段的索引执行搜索。另一方面,由于索引使用了额外的写入和额外数据空间,索引太多会妨碍插入,更新和删除操作的性能。

如何在 MongoDB 中创建索引

语法:

db.collection_name.createIndex({field_name: 1 or -1})

值 1 表示升序,-1 表示降序。

例如,我有一个集合studentdata。此集合中的文档包含以下字段:student_namestudent_idstudent_age

假设我想按升序在student_name字段上创建索引:

db.studentdata.createIndex({student_name: 1})

输出:

{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}

MongoDB create index

我们在student_name上创建了索引,这意味着当有人根据student_name搜索文档时,搜索速度会更快,因为索引将用于此搜索。因此,在字段中创建将在集合中频繁搜索的索引非常重要。

MongoDB - 查找集合中的索引

我们可以使用getIndexes()方法来查找在集合上创建的所有索引。此方法的语法是:

db.collection_name.getIndexes()

因此,要获取studentdata集合的索引,命令将是:

> db.studentdata.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "test.studentdata"
        },
        {
                "v" : 2,
                "key" : {
                        "student_name" : 1
                },
                "name" : "student_name_1",
                "ns" : "test.studentdata"
        }
]

输出显示我们在此集合中有两个索引。在_id上创建的默认索引以及我们在student_name字段上创建的索引。

MongoDB - 删除集合中的索引

您可以删除特定索引或所有索引。

删除特定索引:

为此,使用了dropIndex()方法。

db.collection_name.dropIndex({index_name: 1})

让我们删除我们在集合studentdata中的student_name字段上创建的索引。这个命令:

db.studentdata.dropIndex({student_name: 1})

MongoDB Drop Index

nIndexesWas:显示执行此命令之前有多少索引

ok: 1:表示命令执行成功。

删除所有索引:

要删除集合的所有索引,我们使用dropIndexes()方法。

dropIndexs()方法的语法:

db.collection_name.dropIndexes()

假设我们想要删除studentdata集合的所有索引。

db.studentdata.dropIndexes()

MongoDb Dropping all indexes

消息“为集合删除的非_id索引”表示默认索引_id仍将保留,不能删除。这意味着使用此方法我们只能删除我们创建的索引,我们不能删除在_id字段上创建的默认索引。

NoSQL 数据库简介

原文: https://beginnersbook.com/2017/09/introduction-to-nosql/

数据库管理系统提供存储和检索数据的机制。有不同种类的数据库管理系统:

  1. RDBMS(关系数据库管理系统)
  2. OLAP(在线分析处理)
  3. NoSQL(不仅是 SQL)

在本指南中,我们将讨论 NoSQL。 NoSQL 数据库的创建是为了克服关系数据库的局限性。

什么是 NoSQL 数据库?

NoSQL 数据库与 MQSql 等关系数据库不同。在关系数据库中,您需要创建表,定义模式,设置字段的数据类型等,然后才能实际插入数据。在 NoSQL 中你不必担心,你可以动态插入,更新数据。

NoSQL 数据库的一个优点是它们非常容易扩展,并且它们在我们在数据库上执行的大多数类型的操作中要快得多。在某些情况下,您更喜欢关系数据库而不是 NoSQL,但是当您处理大量数据时,NoSQL 数据库是您的最佳选择。

关系数据库的局限性

  1. 在关系数据库中,我们需要首先定义数据的结构和模式,然后才能处理数据。

  2. 关系数据库系统通过强制执行 ACID 属性(原子性,一致性,隔离性和持久性)来提供数据的一致性和完整性。在某些情况下,这有点像银行系统一样有用。但是,在大多数其他情况下,这些属性是显着的性能开销,并且可能使您的数据库响应非常慢。

  3. 大多数应用以 JSON 格式存储数据,而 RDBMS 不为您提供更好的方法来对此数据执行创建,插入,更新,删除等操作。另一方面,NoSQL 以 JSON 格式存储数据,这与当今世界的大多数应用兼容。

NoSQL 的优点是什么?

使用 NoSQL 数据库(如 MongoDB 和 Cassandra)有几个优点。主要优点是高可扩展性和高可用性。

高可扩展性: NoSQL 数据库(如 MongoDB)使用分片进行水平扩展。分片是对数据进行分区并将其放置在多台机器上,以保持数据的顺序。垂直扩展意味着向现有机器添加更多资源,而水平扩展意味着添加更多机器来处理数据。垂直缩放并不容易实现,另一方面,水平缩放很容易实现。水平扩展数据库示例:MongoDB,Cassandra 等。由于此功能,NoSQL 可以处理大量数据,因为数据增长 NoSQL 扩展自身以高效处理该数据。

高可用性: MongoDB 中的自动复制功能使其具有高可用性,因为如果发生任何故障,数据会将自身复制到先前的一致状态。

NoSQL 数据库的类型

以下是 NoSQL 数据库的类型以及属于该类别的数据库系统的名称。 MongoDB 属于基于 NoSQL 文档的数据库类别。

  • 键值存储:Memcached,Redis,Coherence
  • :Hbase,Big Table,Accumulo
  • 基于文档:MongoDB,CouchDB ,Cloudant

RDBMS 与 NoSQL

RDBMS:它是一种结构化数据,提供更多功能但性能更低。

NoSQL:结构化或半结构化数据,功能更少,性能更高。

RDBMS NoSQL Comparison

所以当我在 NoSQL 中说较少的功能时缺少什么:

  1. NoSQL 中没有约束
  2. NoSQL 不支持连接

这些支持实际上阻碍了数据库的可伸缩性,因此在使用像 MongoDB 这样的 NoSQL 数据库时,可以在应用中实现这些功能水平。

什么时候去 NoSQL

当您想要在关系数据库上选择 NoSQL 时:

  1. 当您想要存储和检索大量数据时。
  2. 您存储的数据之间的关系并不重要
  3. 数据不是结构化的,而是随着时间而变化
  4. 数据库级别不需要约束和联接支持
  5. 数据不断增长,您需要定期扩展数据库以处理数据。

MongoDB 简介

原文: https://beginnersbook.com/2017/09/introduction-to-mongodb/

MongoDB 是一个面向文档的开源数据库,它以文档(键和值对)的形式存储数据。正如我们上一篇教程(NoSQL 介绍)中所讨论的那样,基于文档的数据库是 NoSQL 数据库的一种类型。

什么是文档?

如果您来自关系数据库背景,那么您可以将它们视为 RDBMS 中的行。关系数据库和 MongoDB 之间的映射将在下一个教程中介绍,所以如果你想知道 MongoDB 中的行,表,列的等价物,你一定要检查它:将关系数据库映射到 MongoDB

Document in MongoDB

{
   name: "Chaitanya",
   age: 30,
   website: "beginnersbook.com",
   hobbies: ["Teaching", "Watching TV"]
}

这是 JSON 之类的结构。数据以键和值对的形式存储的位置。

MongoDB 的历史

MongoDB 是由 Eliot 和 Dwight(DoubleClick 的创始人)于 2007 年创建的,当时他们在使用关系数据库时遇到了可扩展性问题。开发 MongoDB 的组织最初称为 10gen。

2009 年 2 月,他们改变了商业模式,并将 MongoDB 作为开源项目发布。该组织于 2013 年更名,现称为 MongoDB Inc。

MongoDB 的功能

MongoDB Features

  1. MongoDB 提供高性能。与关系数据库相比,MongoDB 中的大多数操作都更快。
  2. MongoDB 提供自动复制功能,允许您在发生故障时快速恢复数据。
  3. 由于共享,MongoDB 中可以进行水平缩放。分片是对数据进行分区并将其放置在多台机器上,以保持数据的顺序。

水平缩放与垂直缩放:

垂直缩放意味着向现有机器添加更多资源,而水平缩放意味着添加更多机器来处理数据。垂直缩放并不容易实现,另一方面,水平缩放很容易实现。水平扩展数据库示例:MongoDB,Cassandra 等

  1. 负载均衡:水平扩展允许 MongoDB 平衡负载。
  2. 高可用性:自动复制提高了 MongoDB 数据库的可用性。
  3. 索引:索引是文档中的单个字段。索引用于快速定位数据,而无需搜索 MongoDB 数据库中的每个文档。这提高了在 MongoDB 数据库上执行的操作的性能。

将关系数据库映射到 MongoDB

原文: https://beginnersbook.com/2017/09/mapping-relational-databases-to-mongodb/

如果您来自关系数据库背景,那么您可能很难将 RDBMS 术语与 MongoDB 相关联。在本指南中,我们将看到关系数据库和 MongoDB 之间的映射。

将关系数据库映射到 MongoDB

RDBMS MongoDB Mapping

MongoDB 中的集合等同于 RDBMS 中的表。
MongoDB 中的文档等同于 RDBMS 中的行。
MongoDB 中的字段等同于 RDBMS 中的列。

字段(键和值对)存储在文档中,文档存储在集合中,集合存储在数据库中。

这是文档在 MongoDB 中的样子:正如您所看到的,这与 RDBMS 中的行类似。唯一的区别是它们是 JSON 格式。

Document in MongoDB

表与集合

在这里,我们将看到关系数据库中的表如何在 MongoDB 中查找。如您所见,列被表示为键值对(JSON 格式),行表示为文档。MongoDB 自动在每个文档中插入一个唯一的_id(12 字节字段)字段,这个字段用作每个文档的主键。

Format mapping relational database_to_MongoDB

关于 MongoDB 的另一个很酷的事情是它支持动态模式,这意味着集合中的一个文档可以有 4 个字段,而另一个文档只有 3 个字段。这在关系数据库中是不可能的。

如何为 Windows 安装和配置 MongoDB

原文: https://beginnersbook.com/2017/09/how-to-install-and-configure-mongodb-for-windows/

这是在 Windows 上安装 MongoDB 的完整分步指南。

在 Windows 上安装 MongoDB

步骤 1:转到 MongoDB 下载页面并单击下载,如屏幕截图所示。像这样的.msi文件mongodb-win32-x86_64-2008plus-ssl-3.4.7-signed将在你的系统中下载。双击该文件以运行安装程序。

MongoDB Website Download Page

步骤 2:弹出 MongoDB 安装窗口时单击“下一步”。

MongoDB installation window

步骤 3:接受 MongoDB 用户协议,然后单击“下一步”。

Accept the MongoDB user Agreement

步骤 4:当安装程序要求您选择安装类型时,选择完成。

Choose Complete installation

步骤 5:单击“Install”开始安装。

Click Install

第 6 步:就是这样。 MongoDB 安装完成后,单击“Finish”。

我们没有在这里完成。在开始使用 MongoDB 之前,我们需要做几个步骤。

MongoDB 配置

步骤 1 :找到已安装 MongoDB 的文件夹。如果您已按照上述步骤操作,则可以在此位置找到该文件夹​​:

C:\Program Files\MongoDB

在这里,您需要创建 MongoDB 配置所需的几个文件夹。

  1. 在此处创建两个文件夹,将它们命名为datalog
  2. data中创建另一个文件夹,并将其命名为db,这是所有数据的存储位置。这就是关闭窗口。

步骤 2 :打开命令提示符(右键单击并以管理员身份运行)。导航到 MongoDB 的bin文件夹,如屏幕截图所示。根据您安装 MongoDB 的位置,bin文件夹的路径可能会有所不同。

command prompt mongodb configure

步骤 3 :配置数据并通过键入此命令将日志文件夹和 MongoDB 设置为服务。注意:这是一行命令。

mongod --directoryperdb --dbpath "C:\Program Files\MongoDB\data\db" 
--logpath "C:\Program Files\MongoDB\log\mongo.log" --logappend --rest --install

MongoDB Configure data log file

第 4 步:现在您可以通过输入以下命令启动 MongoDB 作为服务:

net start MongoDB

您应该看到一条消息“MongoDB 服务已成功启动”。

Start MongoDB as Service

这就是一切都完成了。现在我们应该在 MongoDB shell 中工作,我们可以通过在bin目录中键入此命令来运行它。

mongo

Running the MongoDB shell

在下一个教程中,我们将学习如何在 MongoDB shell 中工作。

如果要退出 shell,可以通过键入quit()或使用Ctrl-C来执行此操作,然后可以使用以下命令停止 MongoDB 服务:

net stop MongoDB

在 MongoDB 中创建数据库

原文: https://beginnersbook.com/2017/09/mongodb-create-database/

在本教程中,我们将了解如何在 MongoDB 中创建和使用数据库。

MongoDB 创建数据库

键入以下命令启动 MongoDB 服务:

net start MongoDB

你应该看到这样的消息:

The MongoDB service is starting..
The MongoDB service was started successfully.

导航到 MongoDB 的bin目录,如下面的屏幕截图所示:

Starting MongoDB Service

现在我们应该在 MongoDB shell 中工作。要运行 MongoDB shell,请键入以下命令:

mongo

进入 MongoDB shell 后,通过键入以下命令在 MongoDB 中创建数据库:

use database_name

例如,我正在创建一个数据库beginnersbook,所以命令应该是:

use beginnersbook

注意:如果您提到的数据库名称已存在,则此命令将连接到数据库。但是,如果数据库不存在,那么这将创建具有给定名称的数据库并将您连接到它。

Creating Database in MongoDB

在任何时候,如果要检查当前连接的数据库,只需键入命令db。此命令将显示您当前连接的数据库名称。当您使用多个数据库时,这是非常有用的命令,因此在创建集合或在数据库中插入文档之前,您可能希望确保您位于正确的数据库中。

> db
beginnersbook

Currently Connected Database using DB command

要列出所有数据库,请使用命令show dbs。此命令列出磁盘上的所有数据库及其大小。

> show dbs
admin  0.000GB
local  0.000GB

show dbs command list all databases

如您所见,我们创建的数据库beginnersbook不存在于所有数据库的列表中。这是因为在将文档保存到数据库之前不会创建数据库

现在我们正在创建一个集合user并在其中插入文档。

我们将在下一个教程中学习如何创建集合和文档。

> db.user.insert({name: "Chaitanya", age: 30})
WriteResult({ "nInserted" : 1 })
> show dbs
admin          0.000GB
beginnersbook  0.000GB
local          0.000GB

Database is created

您现在可以看到创建了数据库beginnersbook

删除 MongoDB 中的数据库

原文: https://beginnersbook.com/2017/09/mongodb-drop-database/

在上一个教程中,我们学习了如何在 MongoDB 中创建数据库。在这里,我们将看到如何在 MongoDB 中删除数据库。我们使用db.dropDatabase()命令删除数据库。删除数据库时应该非常小心,因为这将删除该数据库中的所有数据,包括存储在数据库中的集合和文档。

MongoDB 删除数据库

删除数据库的语法是:

db.dropDatabase()

我们在此命令中未指定任何数据库名称,因为此命令将删除当前选定的数据库。让我们看看在 MongoDB 中删除数据库的步骤。

  1. 使用show dbs命令查看数据库列表。
> show dbs
admin          0.000GB
beginnersbook  0.000GB
local          0.000GB

它显示了我创建的两个默认数据库和一个数据库“beginnersbook”。

  1. 键入以下命令切换到需要删除的数据库。
use database_name

例如,我想删除数据库beginnersbook

> use beginnersbook
switched to db beginnersbook

注意:将上述命令中的数据库名称从beginnersbook更改为需要删除的数据库。

  1. 现在,当前选择的数据库是beginnersbook,因此命令db.dropDatabase()将删除此数据库。
> db.dropDatabase()
{ "dropped" : "beginnersbook", "ok" : 1 }

该命令成功执行并显示操作dropped和状态ok,这意味着数据库已被删除。

MongoDB drop database

  1. 验证是否已成功删除数据库。再次执行show dbs命令以查看删除后的数据库列表。

Verifying that database is dropped

正如您所看到的那样,数据库beginnersbook不在列表中,这意味着它已成功删除。

在 MongoDB 中创建集合

原文: https://beginnersbook.com/2017/09/mongodb-create-collection/

我们知道 MongoDB 中的数据是以文档的形式存储的。这些文档存储在集合中,集合存储在数据库中。在上一篇教程中,我们学习了如何在 MongoDB 中创建数据库。在本指南中,我将向您展示在 MongoDB 中创建集合的两种方法。

方法 1:动态创建 MongoDB 中的集合

MongoDB 很酷的一点是,在将文档插入其中之前不需要创建集合。使用单个命令,您可以在集合中插入文档,MongoDB 即时创建该集合。
语法:db.collection_name.insert({key: value, key: value ...})

例如:我们在数据库beginnersbookdb中没有集合beginnersbook。此命令将动态创建名为beginnersbook的集合,并使用指定的键和值对在其中插入文档。

> use beginnersbookdb
switched to db beginnersbookdb

db.beginnersbook.insert({
  name: "Chaitanya",
  age: 30,
  website: "beginnersbook.com"
})

您将在命令提示符中看到此响应。

WriteResult({ "nInserted" : 1 })

Creating collection on the fly MongoDB

要检查文档是否已成功插入,请键入以下命令。它显示给定集合中的所有文档。

语法:db.collection_name.find()

> db.beginnersbook.find()
{ "_id" : ObjectId("59bcb8c2415346bdc68a0a66"), "name" : "Chaitanya",
 "age" : 30, "website" : "beginnersbook.com" }

verifying that collection is created successfully

要检查是否已成功创建集合,请使用以下命令。

show collections

此命令显示当前所选数据库中所有集合的列表。

> show collections
beginnersbook

方法 2:在插入文档之前使用选项创建集合

我们还可以在实际插入数据之前创建集合。此方法为您提供了在创建集合时可以设置的选项。

语法:

db.createCollection(name, options)

name是集合名称,options是一个可选字段,我们可以用它来指定集合中的某些参数,如大小,文档的最大数量等。

首先让我们看看这个命令如何用于创建没有任何参数的集合:

> db.createCollection("students")
{ "ok" : 1 }

Collection without options

让我们看看我们在创建集合时可以提供的选项:

capped:类型:布尔值。

此参数仅为truefalse。这指定了集合可以拥有的最大条目的上限。一旦集合达到该限制,它就会开始覆盖旧条目。

这里需要注意的是,当您将capped选项设置为true时,您还必须指定size参数。

size:类型:数字。

指定集合的​​最大大小(上限集合),以字节为单位。

max:类型:数字。

指定集合可容纳的最大文档数。

autoIndexId:类型:布尔值

此参数的默认值为false。如果将其设置为true,则会自动为每个文档创建索引字段_id。我们将在 MongoDB 索引教程中了解索引。

让我们看一个上限集合的例子:

db.createCollection("teachers", { capped : true, size : 9232768} )
{ "ok" : 1 }

此命令将创建名为teachers的集合,其最大大小为 9232768 字节。一旦此集合达到该限制,它将开始覆盖旧条目。

Creating capped collection in MongoDB

删除 MongoDB 中的集合

原文: https://beginnersbook.com/2017/09/mongodb-drop-collection/

在上一个教程中,我们学习了如何在 MongoDB 中创建集合。在本指南中,我们将了解如何在 MongoDB 中删除集合。

要删除集合,首先连接到要删除集合的数据库,然后键入以下命令以删除集合:

db.collection_name.drop()

注意:删除集合后,所有文档以及与它们关联的索引也将被删除。为了保留索引,我们使用remove()函数,该函数仅删除集合中的文档,但不删除集合本身及其上创建的索引。我们将在后面的教程中学习索引和remove()函数。

MongoDB 删除集合示例

例如,我想在我的数据库beginnersbook.com中删除集合名称teachers。为此,我将按给定的顺序编写以下命令。

> use beginnersbookdb
switched to db beginnersbookdb

> show collections
beginnersbook
students
teachers

> db.teachers.drop()
true

> show collections
beginnersbook
students

正如您所看到的,命令db.teachers.drop()返回true,这意味着该集合已成功删除。我们在删除后使用show collections命令验证了同样的事情,如上所示。

MongoDB drop collection

posted @ 2024-10-24 18:12  绝不原创的飞龙  阅读(12)  评论(0编辑  收藏  举报