当前位置: 首页 > news >正文

帮人做兼职的网站重庆建网站推广

帮人做兼职的网站,重庆建网站推广,网店推广工作内容,品牌网站建设流程来源#xff1a;我没有三颗心脏1.MongDB 简介MongoDB(来自于英文单词“Humongous”#xff0c;中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库#xff0c;MongoDB 的数据模式可以随着应用程序的发展… 来源我没有三颗心脏1.MongDB 简介MongoDB(来自于英文单词“Humongous”中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库MongoDB 的数据模式可以随着应用程序的发展而灵活地更新。与此同时它也为开发人员 提供了传统数据库的功能二级索引完整的查询系统以及严格一致性等等。MongoDB 能够使企业更加具有敏捷性和可扩展性各种规模的企业都可以通过使用 MongoDB 来创建新的应用提高与客户之间的工作效率加快产品上市时间以及降低企业成本。MongoDB 是专为可扩展性高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势MongoDB 能够提供高性能的数据读写操作。MongoDB 的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。以上内容摘自官网1.1 文档型数据库简而言之MongoDB是一个免费开源跨平台的 NoSQL 数据库与关系型数据库不同MongoDB 的数据以类似于 JSON 格式的二进制文档存储{    name: 我没有三颗心脏,    age: 22,}文档型的数据存储方式有几个重要好处文档的数据类型可以对应到语言的数据类型如数组类型(Array)和对象类型(Object)文档可以嵌套有时关系型数据库涉及几个表的操作在 MongoDB 中一次就能完成可以减少昂贵的连接花销文档不对数据结构加以限制不同的数据结构可以存储在同一张表MongoDB 的文档数据模型和索引系统能有效提升数据库性能复制集功能提供数据冗余自动化容灾容错提升数据库可用性分片技术能够分散单服务器的读写压力提高并发能力提升数据库的可拓展性MongoDB 高性能高可用性、可扩展性等特点使其至 2009 年发布以来逐渐被认可并被越来越多的用于生产环境中。AWS、GCP、阿里云等云平台都提供了十分便捷的 MongoDB 云服务。1.2 MongoDB 基础概念可以使用我们熟悉的 MySQL 数据库来加以对比MySQL 基础概念MongoDB 对应概念数据库(database)容器(database)表(table)集合(collection)行(row)文档(document)列(column)域(filed)索引(index)索引(index)也借用一下菜鸟教程)的图来更加形象生动的说明一下这很容易理解但是问题在于我们为什么要引入新的概念呢(也就是为什么我们要把“表”替换成“集合”“行”替换成“文档”“列”替换成“域”呢)原因在于其实在 MySQL 这样的典型关系型数据中我们是在定义表的时候定义列的但是由于上述文档型数据库的特点它允许文档的数据类型可以对应到语言的数据类型所以我们是在定义文档的时候才会定义域的。也就是说集合中的每个文档都可以有独立的域。因此虽说集合相对于表来说是一个简化了的容器而文档则包含了比行要多得多的信息。2 搭建环境怎么样都好搭建好环境就行这里以 OS 环境为例你可以使用 OSX 的 brew 安装 mongodbbrew install mongodb在运行之前我们需要创建一个数据库存储目录 /data/dbsudo mkdir -p /data/db然后启动 mongodb默认数据库目录即为 /data/db(如果不是可以使用 --dbpath 指令来指定)sudo mongd过一会儿你就能看到你的 mongodb 运行起来的提示具体的搭建过程可以参考菜鸟的教程http://www.runoob.com/mongodb/mongodb-window-install.html3 基于 Shell 的 CRUD3.1 连接实例通过上面的步骤我们在系统里运行了一个 mongodb 实例接下来通过 mongo 命令来连接它mongo [options] [db address] [file names]由于上面运行的 mongodb 运行在 27017 端口并且灭有启动安全模式所以我们也不需要输入用户名和密码就可以直接连接mongo 127.0.0.1:27017或者通过 --host 和 --port 选项指定主机和端口。一切顺利的话就进入了 mongoDB shellshell 会报出一连串权限警告不过不用担心这并不会影响之后的操作。在添加授权用户和开启认证后这些警告会自动消失。3.2 CRUD 操作在进行增删改查操作之前我们需要先了解一下常用的 shell 命令db 显示当前所在数据库默认为 testshow dbs 列出可用数据库show tables show collections 列出数据库中可用集合use 用于切换数据库mongoDB 预设有两个数据库admin 和 localadmin 用来存放系统数据local 用来存放该实例数据在副本集中一个实例的 local 数据库对于其它实例是不可见的。使用 use 命令切换数据库 use admin use local use newDatabase可以 use 一个不存在的数据库当你存入新数据时mongoDB 会创建这个数据库 use newDatabase db.newCollection.insert({x:1})WriteResult({ nInserted : 1 })以上命令向数据库中插入一个文档返回 1 表示插入成功mongoDB 自动创建 newCollection 集合和数据库 newDatabase。下面将对增查改删操作进行一个简单的演示。3.2.1 创建(Create)MongoDB 提供 insert 方法创建新文档db.collection.inserOne() 插入单个文档WriteResult({ nInserted : 1 })db.collection.inserMany() 插入多个文档db.collection.insert() 插入单条或多条文档我们接着在刚才新创建的 newDatabase 下面新增数据吧db.newCollection.insert({name:wmyskxz,age:22})根据以往经验应该会觉得蛮奇怪的因为之前在这个集合中插入的数据格式是 {x:1} 的而这里新增的数据格式确是 {name:wmyskxz,age:22} 这个样子的。还记得吗文档型数据库的与传统型的关系型数据的区别就是在这里并且要注意age:22 和 age:22 是不一样的哦前者插入的是一个数值而后者是字符串我们可以通过 db.newCollection.find() 命令查看到刚刚插入的文档 db.newCollection.find(){ _id : ObjectId(5cc1026533907ae66490e46c), x : 1 }{ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz, age : 22 }这里有一个神奇的返回那就是多了一个叫做 _id 的东西这是 MongoDB 为你自动添加的字段你也可以自己生成。大部分情况下还是会让 MongoDB 为我们生成而且默认情况下该字段是被加上了索引的。3.2.2 查找(Read)MongoDB 提供 find 方法查找文档第一个参数为查询条件 db.newCollection.find() # 查找所有文档{ _id : ObjectId(5cc1026533907ae66490e46c), x : 1 }{ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz, age : 22 } db.newCollection.find({name:wmyskxz}) # 查找 name 为 wmyskxz 的文档{ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz, age : 22 } db.newCollection.find({age:{$gt:20}}) # 查找 age 大于 20 的文档{ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz, age : 22 }上述代码中的$gt对应于大于号的转义。第二个参数可以传入投影文档映射数据 db.newCollection.find({age:{$gt:20}},{name:1}){ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz }上述命令将查找 age 大于 20 的文档返回 name 字段排除其他字段。投影文档中字段为 1 或其他真值表示包含0 或假值表示排除可以设置多个字段位为 1 或 0但不能混合使用。为了测试我们为这个集合弄了一些奇奇怪怪的数据 db.newCollection.find(){ _id : ObjectId(5cc1026533907ae66490e46c), x : 1 }{ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz, age : 22 }{ _id : ObjectId(5cc108fb33907ae66490e46e), name : wmyskxz-test, age : 22, x : 1, y : 30 }然后再来测试 db.newCollection.find({age:{$gt:20}},{name:1,x:1}) { _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz }{ _id : ObjectId(5cc108fb33907ae66490e46e), name : wmyskxz-test, x : 1 } db.newCollection.find({age:{$gt:20}},{name:0,x:0}) { _id : ObjectId(5cc102fb33907ae66490e46d), age : 22 }{ _id : ObjectId(5cc108fb33907ae66490e46e), age : 22, y : 30 } db.newCollection.find({age:{$gt:20}},{name:0,x:1})Error: error: {    ok : 0,    errmsg : Projection cannot have a mix of inclusion and exclusion.,    code : 2,    codeName : BadValue}从上面的命令我们就可以把我们的一些想法和上面的结论得以验证perfect除此之外还可以通过 count、skip、limit 等指针(Cursor)方法改变文档查询的执行方式 db.newCollection.find().count()3 db.newCollection.find().skip(1).limit(10).sort({age:1}){ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz, age : 22 }{ _id : ObjectId(5cc108fb33907ae66490e46e), name : wmyskxz-test, age : 22, x : 1, y : 30 }上述查找命令跳过 1 个文档限制输出 10 个以 age 子段正序排序(大于 0 为正序小于 0 位反序)输出结果。最后可以使用 Cursor 方法中的 pretty 方法提升查询文档的易读性特别是在查看嵌套的文档和配置文件的时候 db.newCollection.find().pretty(){ _id : ObjectId(5cc1026533907ae66490e46c), x : 1 }{    _id : ObjectId(5cc102fb33907ae66490e46d),    name : wmyskxz,    age : 22}{    _id : ObjectId(5cc108fb33907ae66490e46e),    name : wmyskxz-test,    age : 22,    x : 1,    y : 30}3.2.3 更新(Update)MongoDB 提供 update 方法更新文档db.collection.updateOne() 更新最多一个符合条件的文档db.collection.updateMany() 更新所有符合条件的文档db.collection.replaceOne() 替代最多一个符合条件的文档db.collection.update() 默认更新一个文档可配置 multi 参数跟新多个文档以 update() 方法为例。其格式 db.collection.update(    ,,    {        upsert: ,        multi:     })各参数意义query 为查询条件update 为修改的文档upsert 为真查询为空时插入文档multi 为真更新所有符合条件的文档下面我们测试把 name 字段为 wmyskxz 的文档更新一下试试 db.newCollection.update({name:wmyskxz},{name:wmyskxz,age:30})WriteResult({ nMatched : 1, nUpserted : 0, nModified : 1 })要注意的是如果更新文档只传入 age 字段那么文档会被更新为{age: 30}而不是{name:wmyskxz, age:30}。要避免文档被覆盖需要用到 $set 指令$set 仅替换或添加指定字段 db.newCollection.update({name:wmyskxz},{$set:{age:30}})如果要在查询的文档不存在的时候插入文档要把 upsert 参数设置真值 db.newCollection.update({name:wmyskxz11},{$set:{age:30}},{upsert:true})update 方法默认情况只更新一个文档如果要更新符合条件的所有文档要把 multi 设为真值并使用 $set 指令 db.newCollection.update({age:{$gt:20}},{$set:{test:A}},{multi:true})WriteResult({ nMatched : 3, nUpserted : 0, nModified : 3 }) db.newCollection.find(){ _id : ObjectId(5cc1026533907ae66490e46c), x : 1 }{ _id : ObjectId(5cc102fb33907ae66490e46d), name : wmyskxz, age : 30, test : A }{ _id : ObjectId(5cc108fb33907ae66490e46e), name : wmyskxz-test, age : 22, x : 1, y : 30, test : A }{ _id : ObjectId(5cc110148d0a578f03d43e81), name : wmyskxz11, age : 30, test : A }3.2.4 删除(Delete)MongoDB 提供了 delete 方法删除文档db.collection.deleteOne() 删除最多一个符合条件的文档db.collection.deleteMany() 删除所有符合条件的文档db.collection.remove() 删除一个或多个文档以 remove 方法为例 db.newCollection.remove({name:wmyskxz11}) db.newCollection.remove({age:{$gt:20}},{justOne:true}) db.newCollection.find(){ _id : ObjectId(5cc1026533907ae66490e46c), x : 1 }{ _id : ObjectId(5cc108fb33907ae66490e46e), name : wmyskxz-test, age : 22, x : 1, y : 30, test : A }MongoDB 提供了 drop 方法删除集合返回 true 表面删除集合成功 db.newCollection.drop()3.2.5 小结相比传统关系型数据库MongoDB 的 CURD 操作更像是编写程序更符合开发人员的直觉不过 MongoDB 同样也支持 SQL 语言。MongoDB 的 CURD 引擎配合索引技术、数据聚合技术和 JavaScript 引擎赋予 MongoDB 用户更强大的操纵数据的能力。参考文章简明 MongoDB 入门教程 - https://segmentfault.com/a/11900000105566704 MongoDB 数据模型的一些讨论前置申明这一部分基于以下链接整理 https://github.com/justinyhuang/the-little-mongodb-book-cn/blob/master/mongodb.md#%E8%AE%B8%E5%8F%AF%E8%AF%81这是一个抽象的话题与大多数NoSQL方案相比,在建模方面,面向文档的数据库算是和关系数据库相差最小的。这些差别是很小但是并不是说不重要。4.1 没有连接(Join)您要接受的第一个也是最基本的一个差别就是 MongoDB 没有连接(join)。我不知道MongoDB不支持某些类型连接句法的具体原因但是我知道一般而言人们认为连接是不可扩展的。也就是说一旦开始横向分割数据最终不可避免的就是在客户端(应用程序服务器)使用连接。且不论MongoDB为什么不支持连接事实是数据是有关系的可是MongoDB不支持连接。(译者这里的关系指的是不同的数据之间是有关联的对于没有关系的数据就完全不需要连接。)为了在没有连接的MongoDB中生存下去在没有其他帮助的情况下我们必须在自己的应用程序中实现连接。基本上我们需要用第二次查询去找到相关的数据。找到并组织这些数据相当于在关系数据库中声明一个外来的键。现在先别管什么独角兽了我们来看看我们的员工。首先我们创建一个员工的数据(这次我告诉您具体的_id值这样我们的例子就是一样的了)db.employees.insert({_id: ObjectId(4d85c7039ab0fd70a117d730), name: Leto})然后我们再加入几个员工并把 Leto 设成他们的老板db.employees.insert({_id: ObjectId(4d85c7039ab0fd70a117d731), name: Duncan, manager: ObjectId(4d85c7039ab0fd70a117d730)});db.employees.insert({_id: ObjectId(4d85c7039ab0fd70a117d732), name: Moneo, manager: ObjectId(4d85c7039ab0fd70a117d730)});(有必要再强调一下_id可以是任何的唯一的值。在实际工作中你很可能会用到ObjectId 所以我们在这里也使用它)显然要找到Leto的所有员工只要执行db.employees.find({manager: ObjectId(4d85c7039ab0fd70a117d730)})没什么了不起的。在最糟糕的情况下为弥补连接的缺失需要做的只是再多查询一次而已该查询很可能是经过索引了的。4.1.1 数组和嵌入文档(Embedded Documents)MongoDB 没有连接并不意味着它没有其他的优势。还记得我们曾说过 MongoDB 支持数组并把它当成文档中的一级对象吗当处理多对一或是多对多关系的时候这一特性就显得非常好用了。用一个简单的例子来说明如果一个员工有两个经理我们可以把这个关系储存在一个数组当中({name: Siona, manager: [ObjectId(4d85c7039ab0fd70a117d730), ObjectId(4d85c7039ab0fd70a117d732)] })需要注意的是在这种情况下有些文档中的 manager 可能是一个向量而其他的却是数组。在两种情况下前面的 find 还是一样可以工作db.employees.find({manager: ObjectId(4d85c7039ab0fd70a117d730)})很快您就会发现数组中的值比起多对多的连接表(join-table)来说要更容易处理。除了数组MongoDB 还支持嵌入文档。尝试插入含有内嵌文档的文档像这样db.employees.insert({_id: ObjectId(4d85c7039ab0fd70a117d734), name: Ghanima, family: {mother: Chani, father: Paul, brother: ObjectId(4d85c7039ab0fd70a117d730)}})也许您会这样想确实也可以这样做嵌入文档可以用‘.’符号来查询db.employees.find({family.mother: Chani})就这样我们简要地介绍了嵌入文档适用的场合以及您应该怎样使用它。4.1.2 DBRefMongoDB 支持一个叫做 DBRef 的功能许多 MongoDB 的驱动都提供对这一功能的支持。当驱动遇到一个 DBRef 时它会把当中引用的文档读取出来。DBRef 包含了所引用的文档的 ID 和所在的集合。它通常专门用于这样的场合相同集合中的文档需要引用另外一个集合中的不同文档。例如文档 1 的 DBRef 可能指向 managers 中的文档而文档 2 中的 DBRef 可能指向 employees 中的文档。4.1.3 范规范化(Denormalization)代替连接的另一种方法就是反规范化数据。在过去反规范化是为性能敏感代码所设或者是需要数据快照(例如审计日志)的时候才应用的。然而随着NoSQL的日渐普及有许多这样的数据库并不提供连接操作于是作为规范建模的一部分反规范化就越来越常见了。这样说并不是说您就需要为每个文档中的每一条信息创建副本。与此相反与其在设计的时候被复制数据的担忧牵着走还不如按照不同的信息应该归属于相应的文档这一思路来对数据建模。比如说假设您在编写一个论坛的应用程序。把一个 user 和一篇 post 关联起来的传统方法是在 posts 中加入一个 userid 的列。这样的模型中如果要显示 posts 就不得不读取(连接)users。一种简单可行的替代方案就是直接把 name 和 userid 存储在 post 中。您甚至可以用嵌入文档来实现比如说 user: {id: ObjectId(Something), name: Leto}。当然如果允许用户更改他们的用户名那么每当有用户名修改的时候您就需要去更新所有的文档了(这需要一个额外的查询)。对一些人来说改用这种方法并非易事。甚至在一些情况下根本行不通。不过别不敢去尝试这种方法有时候它不仅可行而且就是正确的方法。4.1.4 应该选择哪一种当处理一对多或是多对多问题的时候采用id数组往往都是正确的策略。可以这么说DBRef 并不是那么常用虽然您完全可以试着采用这项技术。这使得新手们在面临选择嵌入文档还是手工引用(manual reference)时犹豫不决。首先要知道目前一个单独的文档的大小限制是 4MB虽然已经比较大了。了解了这个限制可以为如何使用文档提供一些思路。目前看来多数的开发者还是大量地依赖手工引用来维护数据的关系。嵌入文档经常被使用but mostly for small pieces of data which we want to always pull with the parent document。一个真实的例子我把 accounts 文档嵌入存储在用户的文档中就像这样db.users.insert({name: leto, email: letodune.gov, account: {allowed_gholas: 5, spice_ration: 10}})这不是说您就应该低估嵌入文档的作用也不是说应该把它当成是鲜少用到的工具并直接忽略。将数据模型直接映射到目标对象上可以使问题变得更加简单也往往因此而不再需要连接操作。当您知道 MongoDB 允许对嵌入文档的域进行查询并做索引后这个说法就尤其显得正确了。4.2 集合少一些还是多一些既然集合不强制使用模式那么就完全有可能用一个单一的集合以及一个不匹配的文档构建一个系统。以我所见过的情况大部分的 MongoDB 系统都像您在关系数据库中所见到的那样布局。换句话说如果在关系数据库中会用表那么很有可能在 MongoDB 中就要用集合(多对多连接表在这里是一个不可忽视的例外)当把嵌入文档引进来的时候讨论就会变得更加有意思了。最常见的例子就是博客系统。是应该分别维护 posts 和 comments 两个集合还是在每个 post 中嵌入一个 comments 数组暂且不考虑那个 4MB 的限制(哈姆雷特所有的评论也不超过200KB谁的博客会比他更受欢迎)大多数的开发者还是倾向于把数据划分开。因为这样既简洁又明确。没有什么硬性的规定(呃除了 4MB 的限制)。做了不同的尝试之后您就可以凭感觉知道怎样做是对的了。总结至此已经对 MongoDB 有了一个基本的了解和入门但是要运用在实际的项目中仍然有许多实践需要自己去完成ENDJava面试题专栏【40期】说一下线程池内部工作原理【39期】Mybatis面试18问你想知道的都在这里了【38期】一份tcp、http面试指南常考点都给你了【37期】请你详细说说类加载流程类加载机制及自定义类加载器【36期】说说 如何停止一个正在运行的线程【35期】谈谈你对Java线程之间通信方式的理解【34期】谈谈为什么要拆分数据库有哪些方法【33期】分别谈谈联合索引生效和失效的条件【32期】你知道Redis的字符串是怎么实现的吗【31期】了解什么是 redis 的雪崩、穿透和击穿redis 崩溃之后会怎么样应对措施是什么我知道你 “在看”
http://www.zqtcl.cn/news/811275/

相关文章:

  • 网站建设尺寸规范国外h5网站模板下载
  • 怎么区分网站的好坏软件定制化开发的知识产权归属
  • 网站建设客户需求分析调研表网站建设企业网站
  • 建设网站要注意什么问题临沂网站建设团队
  • 怎么做网站和注册域名互联网行业的工作岗位
  • 北京做网站优化多少钱网站反链和外链的区别
  • 厦门网站推广找谁wordpress的模板目录在哪里
  • 做网站的维护成本wordpress 密码更改
  • 企业网站建设流程概述长春网站推广排名
  • 网站导航设计牙科 网站建设方案
  • 手机微信网站开发教程企业网站的制作成本
  • 做电商网站的流程网站架构搭建
  • 可以下载新闻视频的网站重庆seo
  • 网站内容页设计网站建设实验分析
  • 网站建设的软硬件环境凡科精选app
  • 网站开发过滤器作用信息港怎么发布信息
  • 网站服务器组建百度seo引流怎么做
  • 南京网站定制公司如何用源码做网站
  • 网站建站视频wordpress网站好用吗
  • 网页设计网站搭建建筑材料价格信息网
  • 淮安市交通建设局网站新郑做网站
  • 新开传奇网站手机版深圳房管局官网
  • 重庆网站建设营销深圳微商城网站设计公司
  • 用织梦做的网站是模板的吗外贸展示型模板网站
  • 网站seo的关键词排名怎么做的定制和订制
  • 自适应网站做多大尺寸的四川建设厅电话网站
  • 易语言可以做网站了吗电商平台排名100强
  • 网站代码开发方式影视公司网页设计
  • 如何选择网站定制公司响水专业做网站
  • 海门建网站公司凡客模板wordpress