MongoDB条记02-MongoDB根本常用下令

[复制链接]
发表于 2025-12-30 01:22:15 | 显示全部楼层 |阅读模式
<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输入以下下令进入数据库(或设置情况变量)
  1. mongo
  2. mongo --host=127.0.0.1 --port=27017
复制代码
2.1 选择和创建数据库

选择和创建数据库的语法格式:
  1. use 数据库名称
复制代码
如果数据库不存在则主动创建,比方,以下语句创建 articledb
数据库:
  1. use articledb
复制代码
检察的全部的数据库下令
  1. show db
  2. s
  3. show databases
复制代码
  留意: 在 MongoDB 中,聚集只有在内容插入后才会创建! 就是说,创建聚集(数据表)后要再插入一个文档(记载),聚集才会真正创建。
  检察当前正在使用的数据库下令
  1. db
复制代码
MongoDB 中默认的数据库为 test,如果你没有选择数据库,聚集将存放在 test 数据库中。
   别的:
数据库名可以是满足以下条件的恣意UTF-8字符串。
不能是空字符串(“”)。
不得含有’ '(空格)、.、$、/、\和\0 (空字符)。
应全部小写。
最多64字节。
  有一些数据库名是保存的,可以直接访问这些有特别作用的数据库。

      
  • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户主动继承全部数据库的权限。一些特定的服务器端下令也只能从这个数据库运行,比如列出全部的数据库大概关闭服务器。  
  • local: 这个数据永世不会被复制,可以用来存储限于本地单台服务器的恣意聚集  
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于生存分片的干系信息。
2.2 数据库的删除

MongoDB 删除数据库的语法格式如下:
  1. db
  2. .dropDatabase()
复制代码
提示:紧张用来删除已经长期化的数据库
步调:
      
  • 先切换到必要删除的数据库  
  • 使用db
    .dropDatabase()

3 聚集使用

聚集,雷同关系型数据库中的表
可以体现的创建,也可以隐式的创建。
3.1 聚集的显式创建

根本语法格式:
  1. db
  2. .createCollection("name")
复制代码
参数分析:
name: 要创建的聚集名称
比方:创建一个名为 mytest 的平凡聚集。
  1. db
  2. .createCollection("mytest")
复制代码
检察当前库中的表:show tables下令
  1. show collections
  2. show tables
复制代码
聚集的定名规范:

      
  • 聚集名不能是空字符串""。  
  • 聚集名不能含有\0字符(空字符),这个字符体现聚集名的末端。  
  • 聚集名不能以"system."开头,这是为体系聚集保存的前缀。  
  • 用户创建的聚集名字不能含有保存字符。有些驱动步伐简直支持在聚集名内里包罗,这是由于某些体系天生的聚集中包罗该字符。除  
  • 非你要访问这种体系创建的聚集,否则千万不要在名字里出现$。
3.2 聚集的隐式创建

当向一个聚集中插入一个文档的时间,如果聚集不存在,则会主动创建聚集。
提示:通常我们使用隐式创建文档即可。
3.3 聚集的删除

聚集删除语法格式如下:
  1. db
  2. .collection.drop()
复制代码
返回值
如果乐成删除选定聚集,则 drop() 方法返回 true,否则返回 false。
比方:要删除mytest聚集
  1. db
  2. .mytest.drop()
复制代码
四、文档根本CRUD

文档(document)的数据布局和 JSON 根本一样。
全部存储在聚集中的数据都是 BSON 格式。
4.1 文档的插入

4.1.1 单个文档插入

使用insert() 或 save() 方法向聚集中插入文档,语法如下
  1. db
  2. .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的聚集(表)中插入一条测试数据:
  1. db
  2. .comment.insert({      "articleid":"100000","content":"c是最好的语言","userid":"1001","nickname":"c","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})
复制代码
实验后,如下,分析插入一个数据乐成了。
  1. WriteResult({
  2.    
  3.     "nInserted" : 1 })
复制代码
  提示:
comment聚集如果不存在,则会隐式创建
mongo中的数字,默认情况下是double范例,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有题目了。
插入当前日期使用 new Date()
插入的数据没有指定 _id ,会主动天生主键值
如果某字段没值,可以赋值为null,或不写该字段。
  文档键定名规范:
      
  • 键不能含有\0 (空字符)。这个字符用来体现键的末端。  
  • 和$有特别的意义,只有在特定情况下才气使用。  
  • 以下划线"_"开头的键是保存的(不是严酷要求的)。
4.1.2 批量插入

语法:
  1. db
  2. .collection.insertMany(    [ <document 1> , <document 2>, ... ],    {              writeConcern: <document>,        ordered: <boolean>    })
复制代码
【示例】
批量插入多条文章品评:
  1. db
  2. .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 文档的根本查询

查询数据的语法格式如下:
  1. db
  2. .collection.find(<query>, [projection])
复制代码
参数:
     参数    范例    分析              query    document    可选。使用查询运算符指定选择筛选器。若要返回聚集中的全部文档,请省略此参数或通报空文档( {} )。          projection    document    可选。指定要在与查询筛选器匹配的文档中返回的字段(投影)。若要返回匹配文档中的全部字段,请省略此参数。.    【示例】
4.2.1 查询全部

  1. db
  2. .comment.find()或db
  3. .comment.find({      })
复制代码
这里你会发现每条文档会有一个叫_id的字段,这个相称于我们原来关系数据库中表的主键,当你在插入文档记载时没有指定该字段,MongoDB会主动创建,其范例是ObjectID范例。
如果我们在插入文档记载时指定该字段也可以,其范例可以是ObjectID范例,也可以是MongoDB支持的恣意范例。
如果我想按肯定条件来查询,比如我想查询userid为1003的记载,只要在find()中添加参数即可,参数也是json格式,如下:
  1. > db
  2. .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的记载,但只最多返回符合条件的第一条记载:
  1. > db
  2. .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 :
  1. > db
  2. .comment.find({      userid:"1003"},{      userid:1,nickname:1}){       "_id" : "4", "userid" : "1003", "nickname" : "php" }{       "_id" : "5", "userid" : "1003", "nickname" : "java" }
复制代码
默认 _id 会体现。
如:查询结果只体现 userid、nickname ,不体现 _id :
  1. > db
  2. .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 :
  1. > db
  2. .comment.find({        },{        userid:1,nickname:1}){       "_id" : ObjectId("67209f3337dc10d70c75655a"), "userid" : "1001", "nickname" : "c" }{       "_id" : "1", "userid" : "1
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表