<hr>
一、前言
如今必要将项目中文章品评的数据存放到MongoDB中,文章品评的数据布局参考如下:
数据库:articledb
聚集:专栏文章品评 comment
字段名称 字段寄义 字段范例 备注 _id ID ObjectId 或 String MongoDB 的主键的字段 articleid 文章ID String content 品评内容 String userid 品评人ID String nickname 品评人昵称 String createdatetime 品评的日期时间 Date likenum 点赞数 Int32 replynum 复兴数 Int32 state 状态 String 0:不可见;1:可见; parentid 上级ID String 如果为0体现文章的顶级品评 二、数据库使用
情况:windows
安装完mongodb
后启动服务,在mongodb
的bin文件夹下使用cmd输入以下下令进入数据库(或设置情况变量)
- mongo
- 或
- mongo --host=127.0.0.1 --port=27017
复制代码 2.1 选择和创建数据库
选择和创建数据库的语法格式:
如果数据库不存在则主动创建,比方,以下语句创建 articledb
数据库:
检察的全部的数据库下令
留意: 在 MongoDB 中,聚集只有在内容插入后才会创建! 就是说,创建聚集(数据表)后要再插入一个文档(记载),聚集才会真正创建。
检察当前正在使用的数据库下令
MongoDB 中默认的数据库为 test,如果你没有选择数据库,聚集将存放在 test 数据库中。
别的:
数据库名可以是满足以下条件的恣意UTF-8字符串。
不能是空字符串(“”)。
不得含有’ '(空格)、.、$、/、\和\0 (空字符)。
应全部小写。
最多64字节。
有一些数据库名是保存的,可以直接访问这些有特别作用的数据库。
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户主动继承全部数据库的权限。一些特定的服务器端下令也只能从这个数据库运行,比如列出全部的数据库大概关闭服务器。
- local: 这个数据永世不会被复制,可以用来存储限于本地单台服务器的恣意聚集
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于生存分片的干系信息。
2.2 数据库的删除
MongoDB 删除数据库的语法格式如下:
提示:紧张用来删除已经长期化的数据库
步调:
- 先切换到必要删除的数据库
- 使用db
.dropDatabase()
3 聚集使用
聚集,雷同关系型数据库中的表
可以体现的创建,也可以隐式的创建。
3.1 聚集的显式创建
根本语法格式:
- db
- .createCollection("name")
复制代码 参数分析:
name: 要创建的聚集名称
比方:创建一个名为 mytest 的平凡聚集。
- db
- .createCollection("mytest")
复制代码 检察当前库中的表:show tables下令
- show collections
- 或
- show tables
复制代码 聚集的定名规范:
- 聚集名不能是空字符串""。
- 聚集名不能含有\0字符(空字符),这个字符体现聚集名的末端。
- 聚集名不能以"system."开头,这是为体系聚集保存的前缀。
- 用户创建的聚集名字不能含有保存字符。有些驱动步伐简直支持在聚集名内里包罗,这是由于某些体系天生的聚集中包罗该字符。除
- 非你要访问这种体系创建的聚集,否则千万不要在名字里出现$。
3.2 聚集的隐式创建
当向一个聚集中插入一个文档的时间,如果聚集不存在,则会主动创建聚集。
提示:通常我们使用隐式创建文档即可。
3.3 聚集的删除
聚集删除语法格式如下:
返回值
如果乐成删除选定聚集,则 drop() 方法返回 true,否则返回 false。
比方:要删除mytest聚集
四、文档根本CRUD
文档(document)的数据布局和 JSON 根本一样。
全部存储在聚集中的数据都是 BSON 格式。
4.1 文档的插入
4.1.1 单个文档插入
使用insert() 或 save() 方法向聚集中插入文档,语法如下
- db
- .collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> })
复制代码 参数
参数 范例 分析 document document or array 要插入到聚集中的文档或文档数组。((json格式) writeConcern document 可选. A document expressing the write concern. Omit to use the default write concern.See Write Concern.Do not explicitly set the write concern for the operation if run in a transaction. To use write concern with transactions, see Transactions and Write Concern. ordered boolean 可选。如果为真,则按次序插入数组中的文档,如果此中一个文档出现错误,MongoDB将返回而不处置惩罚数组中的别的文档。如果为假,则实验无序插入,如果此中一个文档出现错误,则继承处置惩罚数组中的主文档。在版本2.6+中默以为true 【示例】
要向comment的聚集(表)中插入一条测试数据:
- db
- .comment.insert({ "articleid":"100000","content":"c是最好的语言","userid":"1001","nickname":"c","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})
复制代码 实验后,如下,分析插入一个数据乐成了。
- WriteResult({
-
- "nInserted" : 1 })
复制代码 提示:
comment聚集如果不存在,则会隐式创建
mongo中的数字,默认情况下是double范例,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有题目了。
插入当前日期使用 new Date()
插入的数据没有指定 _id ,会主动天生主键值
如果某字段没值,可以赋值为null,或不写该字段。
文档键定名规范:
- 键不能含有\0 (空字符)。这个字符用来体现键的末端。
- 和$有特别的意义,只有在特定情况下才气使用。
- 以下划线"_"开头的键是保存的(不是严酷要求的)。
4.1.2 批量插入
语法:
- db
- .collection.insertMany( [ <document 1> , <document 2>, ... ], { writeConcern: <document>, ordered: <boolean> })
复制代码 【示例】
批量插入多条文章品评:
- db
- .comment.insertMany([{ "_id":"1","articleid":"100001","content":"java是最好的语言","userid":"1002","nickname":"java","createdatetime":new Date("2019-08-05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"},{ "_id":"2","articleid":"100001","content":"python是最好的语言","userid":"1005","nickname":"python","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"},{ "_id":"3","articleid":"100001","content":"C++是最好的语言","userid":"1004","nickname":"C++","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"},{ "_id":"4","articleid":"100001","content":"php是最好的语言","userid":"1003","nickname":"php","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"},{ "_id":"5","articleid":"100001","content":"java是面向对象的","userid":"1003","nickname":"java","createdatetime":new Date("2019-08-06T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"}]);
复制代码 提示:
插入时指定了 _id ,则主键就是该值。
如果某条数据插入失败,将会制止插入,但已经插入乐成的数据不会回滚掉。
由于批量插入由于数据较多轻易出现失败,因此,可以使用try catch举行非常捕获处置惩罚,测试的时间可以不处置惩罚。
4.2 文档的根本查询
查询数据的语法格式如下:
- db
- .collection.find(<query>, [projection])
复制代码 参数:
参数 范例 分析 query document 可选。使用查询运算符指定选择筛选器。若要返回聚集中的全部文档,请省略此参数或通报空文档( {} )。 projection document 可选。指定要在与查询筛选器匹配的文档中返回的字段(投影)。若要返回匹配文档中的全部字段,请省略此参数。. 【示例】
4.2.1 查询全部
- db
- .comment.find()或db
- .comment.find({ })
复制代码 这里你会发现每条文档会有一个叫_id的字段,这个相称于我们原来关系数据库中表的主键,当你在插入文档记载时没有指定该字段,MongoDB会主动创建,其范例是ObjectID范例。
如果我们在插入文档记载时指定该字段也可以,其范例可以是ObjectID范例,也可以是MongoDB支持的恣意范例。
如果我想按肯定条件来查询,比如我想查询userid为1003的记载,只要在find()中添加参数即可,参数也是json格式,如下:
- > db
- .comment.find({ userid:'1003'}){ "_id" : "4", "articleid" : "100001", "content" : "php是最好的语言", "userid" : "1003", "nickname" : "php", "createdatetime" : ISODate("2019-08-06T08:18:35.288Z"), "likenum" : 2000, "state" : "1" }{ "_id" : "5", "articleid" : "100001", "content" : "java是面向对象的", "userid" : "1003", "nickname" : "java", "createdatetime" : ISODate("2019-08-06T11:01:02.521Z"), "likenum" : 3000, "state" : "1" }
复制代码 如果你只必要返回符合条件的第一条数据,我们可以使用findOne下令来实现,语法和find一样。
如:查询用户编号是1003的记载,但只最多返回符合条件的第一条记载:
- > db
- .comment.findOne({ userid:'1003'}){ "_id" : "4", "articleid" : "100001", "content" : "php是最好的语言", "userid" : "1003", "nickname" : "php", "createdatetime" : ISODate("2019-08-06T08:18:35.288Z"), "likenum" : 2000, "state" : "1"}
复制代码 4.2.2 投影查询(Projection Query):
如果要查询结果返回部门字段,则必要使用投影查询(不体现全部字段,只体现指定的字段)。
如:查询结果只体现 _id、userid、nickname :
- > db
- .comment.find({ userid:"1003"},{ userid:1,nickname:1}){ "_id" : "4", "userid" : "1003", "nickname" : "php" }{ "_id" : "5", "userid" : "1003", "nickname" : "java" }
复制代码 默认 _id 会体现。
如:查询结果只体现 userid、nickname ,不体现 _id :
- > db
- .comment.find({ articleid:'100001'},{ userid:1,nickname:1,_id:0}){ "userid" : "1002", "nickname" : "java" }{ "userid" : "1005", "nickname" : "python" }{ "userid" : "1004", "nickname" : "C++" }{ "userid" : "1003", "nickname" : "php" }{ "userid" : "1003", "nickname" : "java" }
复制代码 如:查询全部数据,但只体现 _id、userid、nickname :
- > db
- .comment.find({ },{ userid:1,nickname:1}){ "_id" : ObjectId("67209f3337dc10d70c75655a"), "userid" : "1001", "nickname" : "c" }{ "_id" : "1", "userid" : "1
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |