案列需求:

  • 存在文章评论的数据存放到MongoDB中,数据结构参考如下:

    数据库:articledb

    专栏文章评论 comment / /
    字段名称 字段含义 字段类型 备注
    _id ID Object或String Mongo的主键
    articleid 文章ID String
    content 评论内容 String
    userid 评论人的ID String
    nickname 评论人的昵称 String
    createdatetime 评论的日期时间 Date
    likenum 点赞数 int32
    replaynum 回复数 int32
    state 状态 String 0:不可见 1:可见
    parentid 上级ID String 如果为0表示文章的顶级评论

    数据库的操作

    • 选择和创建数据库的语法

      use  数据库名字
      -----------------------------------
      > use articledb
    • 查看有权限查看的所有数据库

      show dbs 或者 show  databases
      注意:在MongoDB中,集合只有在内容插入后才会创建!!!
      ----------------------------------------------------------------
      > show dbs
      admin 0.000GB
      config 0.000GB
      local 0.000GB
      > use articledb
      switched to db articledb
      > show dbs #并没有看到新创建的articledb库,因为创建时是在内存中,还没有持久化到磁盘
      admin 0.000GB
      config 0.000GB
      local 0.000GB
      > db
      articledb
    • 查看当前正在使用的数据库

      db
      注意:数据库名可以使满足以下条件的任意UTF-8字符串
      *不能是空字符串
      *不应该含有空格 . $ / \ \0等字符
      *应该全部小写
      *最多64字符
    • 数据库的删除--语法格式如下

      db.dropDatabase()   #主要用来删除已经持久化的数据库
      -----------------------------------------------------------
      > db
      articledb
      > db.dropDatabase()
      { "ok" : 1 }
    • 集合操作----集合就类似于mysql中的表

      1.1:集合的显示创建(了解)
      基本语法:db.createCollection(name)
      -name:要创建的集合名称
      -------------------------------------------------
      创建一个名为mycollection的集合
      db.createCollection("mycollection")
      • 查看当前的集合(数据表)和删除集合

        show collections 或者  show  tables
        db.集合名.drop()
        ---------------------------------------------
        > use articledb # 创建一个数据库
        switched to db articledb
        > db.createCollection("mycollection") #创建一个集合
        { "ok" : 1 }
        > show tables #查看集合
        mycollection
        > db.mycollection.drop() # 删除集合
        true

CURD--重点

文档(document)的数据结构和JSON基本一样。

所有存储在集合中的数据都是BSON格式。

I插入

  • (1) 单个文档的插入

    使用insert()或save()方法向集合中插入文档,语法如下:

    db.collection名.insert(
    <document or array of document>, --要插入到集合中的文档或文档数据
    {
    writeConcern:<document>, --可选
    ordered:<boolean> --可选
    }
    )
    -----------------------------------------------------------------------------------------
    向comment的集合中插入一条测试数据:
    db.comment.insert({"articleid":"100000","content":"我爱你,憨憨1","userid":"1001",
    "nickname":"hanhan01","createdatetime":new Date(),"likenum":NumberInt(520),"state":null}) 解释:
    1)comment集合如果不存在,则隐式创建
    2)mongo中的数字,默认是double类型,如果需要存整型,就要使用函数NumberInt(整形数字),否则取出来会有问题
    3)插入当前日期使用new Date()
    4)插入的数据没有指定_id,会自动创建
    5)如果某一字段没值,可以指定为null,或者不写该字段 执行:

db.comment.insert({"articleid":"100000","content":"我爱你,憨憨1","userid":"1001",

... "nickname":"hanhan01","createdatetime":new Date(),"likenum":NumberInt(520),"state":null})

WriteResult({ "nInserted" : 1 })


- (2)批量插入 ```python
db.collection名.insertMany(
[<document 1>,<document 2>,...]
{
writeConcern:<document>, --可选
ordered:<boolean> --可选
}
)
-----------------------------------------------------------------------------------
向comment插入多条数据:
db.comment.insertMany([
{"_id":"2","articleid":"100002","content":"我爱你,绩憨憨2","userid":"1002",
"nickname":"hanhan","createdatetime":new Date(),"likenum":NumberInt(521),"state":null},
{"_id":"3","articleid":"100003","content":"我爱你,绩憨憨3","userid":"1003",
"nickname":"hanhan","createdatetime":new Date(),"likenum":NumberInt(522),"state":null},
{"_id":"4","articleid":"100004","content":"我爱你,绩憨憨4","userid":"1004",
"nickname":"hanhan","createdatetime":new Date(),"likenum":NumberInt(523),"state":null}, ])
解释:
1插入时指定了_id,则主键就是该值
2如果某条数据插入失败,将会终止插入,但是已经插入成功的数据--不会回滚
3因为批量插入的时候由于数据较多,容易出现失败,因此,可以使用try catch进行异常捕捉处理 执行:
> db.comment.insertMany([
... {"_id":"2","articleid":"100002","content":"我爱你,绩憨憨2","userid":"1002",
... "nickname":"hanhan","createdatetime":new Date(),"likenum":NumberInt(521),"state":null},
... {"_id":"3","articleid":"100003","content":"我爱你,绩憨憨3","userid":"1003",
... "nickname":"hanhan","createdatetime":new Date(),"likenum":NumberInt(522),"state":null},
... {"_id":"4","articleid":"100004","content":"我爱你,绩憨憨4","userid":"1004",
... "nickname":"hanhan","createdatetime":new Date(),"likenum":NumberInt(523),"state":null},
...
... ])
{ "acknowledged" : true, "insertedIds" : [ "2", "3", "4" ] } #成功 ``` ## II查询 - (1)基本的查询语法 ```python
db.collection名.find(<query>,[projection])
---------------------------------------------
1:查询comment所有的内容
db.comment.find() 或者db.comment.find({}) 执行:
> db.comment.find({})
{ "_id" : ObjectId("5e57cc7d24335849dc4a2ab8"), "articleid" : "100000", "content" : "我爱你,中国", "userid" : "1001", "nickname" : "Rose", "createdatetime" : ISODate("2020-02-27T14:04:45.459Z"), "likenum" : 10, "state" : null }
{ "_id" : "2", "articleid" : "100002", "content" : "我爱你,绩憨憨2", "userid" : "1002", "nickname" : "hanhan", "createdatetime" : ISODate("2020-02-27T14:17:24.708Z"), "likenum" : 10, "state" : null }
{ "_id" : "3", "articleid" : "100003", "content" : "我爱你,绩憨憨3", "userid" : "1003", "nickname" : "hanhan", "createdatetime" : ISODate("2020-02-27T14:17:24.709Z"), "likenum" : 10, "state" : null }
{ "_id" : "4", "articleid" : "100004", "content" : "我爱你,绩憨憨4", "userid" : "1004", "nickname" : "hanhan", "createdatetime" : ISODate("2020-02-27T14:17:24.709Z"), "likenum" : 10, "state" : null } 2:条件查询,查询userid为1003的记录
db.comment.find({"userid":"1003"}) 执行:
> db.comment.find({"userid":"1003"})
{ "_id" : "3", "articleid" : "100003", "content" : "我爱你,绩憨憨3", "userid" : "1003", "nickname" : "hanhan", "createdatetime" : ISODate("2020-02-27T14:17:24.709Z"), "likenum" : 10, "state" : null } 3:查询多条数据,但是只想查到第一条
db.comment.find({'likenum':10}) 执行:> db.comment.find({'likenum':10})
{ "_id" : ObjectId("5e57cc7d24335849dc4a2ab8"), "articleid" : "100000", "content" : "我爱你,中国", "userid" : "1001", "nickname" : "Rose", "createdatetime" : ISODate("2020-02-27T14:04:45.459Z"), "likenum" : 10, "state" : null }
{ "_id" : "2", "articleid" : "100002", "content" : "我爱你,绩憨憨2", "userid" : "1002", "nickname" : "hanhan", "createdatetime" : ISODate("2020-02-27T14:17:24.708Z"), "likenum" : 10, "state" : null }
{ "_id" : "3", "articleid" : "100003", "content" : "我爱你,绩憨憨3", "userid" : "1003", "nickname" : "hanhan", "createdatetime" : ISODate("2020-02-27T14:17:24.709Z"), "likenum" : 10, "state" : null }
{ "_id" : "4", "articleid" : "100004", "content" : "我爱你,绩憨憨4", "userid" : "1004", "nickname" : "hanhan", "createdatetime" : ISODate("2020-02-27T14:17:24.709Z"), "likenum" : 10, "state" : null } 只想查询到第一条:db.集合名.findOne({})
db.comment.findOne({'likenum':10}) 执行:
> db.comment.findOne({'likenum':10})
{
"_id" : ObjectId("5e57cc7d24335849dc4a2ab8"),
"articleid" : "100000",
"content" : "我爱你,中国",
"userid" : "1001",
"nickname" : "Rose",
"createdatetime" : ISODate("2020-02-27T14:04:45.459Z"),
"likenum" : 10,
"state" : null
}
  • 投影查询(Projection Query)

    如果要查询结果返回部分字段,则需要使用投影查询

    注意使用1:显示 0:不显示

    1:查询结果只显示_id,userid,nickname
    db.comment.find({'likenum':10},{userid:1,nickname:1}) 执行:
    > db.comment.find({'likenum':10},{userid:1,nickname:1})
    { "_id" : ObjectId("5e57cc7d24335849dc4a2ab8"), "userid" : "1001", "nickname" : "Rose" }
    { "_id" : "2", "userid" : "1002", "nickname" : "hanhan" }
    { "_id" : "3", "userid" : "1003", "nickname" : "hanhan" }
    { "_id" : "4", "userid" : "1004", "nickname" : "hanhan" } 2:如果想去除_id,
    db.comment.find({'likenum':10},{userid:1,nickname:1,_id:0}) 执行:
    > db.comment.find({'likenum':10},{userid:1,nickname:1,_id:0})
    { "userid" : "1001", "nickname" : "Rose" }
    { "userid" : "1002", "nickname" : "hanhan" }
    { "userid" : "1003", "nickname" : "hanhan" }
    { "userid" : "1004", "nickname" : "hanhan" }

MongoDB_04_插入和查询的更多相关文章

  1. Trie树的创建、插入、查询的实现

    原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28977986&id=3807947 1.什么是Trie树 Tr ...

  2. Hibernate框架的基本搭建(一个小的java project的测试向数据库中插入和查询数据的功能)

    Hibernate介绍:Hibernate是一种“对象-关系型数据映射组件”,它使用映射文件将对象(object)与关系型数据(Relational)相关联,在Hibernate中映射文件通常以&qu ...

  3. java序列化对象 插入、查询、更新到数据库

    java序列化对象 插入.查询.更新到数据库 : 实现代码例如以下: import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...

  4. EF框架操作postgresql,实现WKT类型坐标的插入,查询,以及判断是否相交

    1.组件配置 首先,要下载.NET for Postgresql的驱动,npgsql,EF6,以及EntityFramework6.Npgsql,版本号 3.1.1.0. 由于是mvc项目,所以,把相 ...

  5. Phoenix表和索引分区数对插入和查询性能的影响

    1. 概述 1.1 HBase概述 HBase由master节点和region server节点组成.在100-105集群上,100和101是master节点,102-105是region serve ...

  6. Splay的基本操作(插入/删除,查询)

    Splay的基本操作(插入/删除,查询) 概述 这是一棵二叉查找树 让频繁访问的节点尽量靠近根 将查询,插入等操作的点"旋转"至根 树的高度均摊为$log_n$ 变量 int ro ...

  7. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  8. 插入和查询HBase速度都比较慢

    表层问题:插入和查询HBase速度比较慢 排查一,查看HBase节点状态,发现正常运行: 排查二,查看访问HBase服务的状态,发现服务停止: 依次点击服务实例,查看服务状态 133和135节点上的服 ...

  9. (整理)SQLServer 大数据的插入与查询

    最近几天一直在折腾大数据量的查询,最后在索引.分页存储过程和控件以及视图的帮助下,搞定了.这篇文章记录解决问题时候查看的网友的分享链接,以及大数据量数据的插入链接. DatagridView Virt ...

随机推荐

  1. windows通过zip安装mysql5.7.26的一个坑

    需要将my.ini的 红框的/不能写成\ 注意编码格式问题 然后 mysqld --initialize-insecure mysqld --install net start mysql

  2. OBST(最优二叉搜索树)

    简述一下问题:假设有一颗词典二叉树,我们从中查找需要的单词,使用红黑树或平衡树这样的数据结构总是可以在O(lgN)时间内进行查找,但单词的出现频率是不同的,我们给每个单词加上一个搜索概率,然后通过这些 ...

  3. mysql innodb cluster 无感知集群

    MySQL 8.0.12 innodb cluster 高可用集群部署运维管理手册 Innodb cluster 原理介绍 Innodb cluster  利用组复制的 pxos 协议,保障数据一致性 ...

  4. [转]简单总结一下解决 添加 inline-block 后多出来的空隙

    添加 inline-block 后: 查询.借鉴的原网址:http://www.zhangxinxu.com/wordpress/?p=2357 html 结构: <ul class=" ...

  5. python中提取位图信息(AttributeError: module 'struct' has no attribute 'unstack')

    前言 今天这篇博文有点意思,它是从一个例子出发,从而体现出在编程中的种种细节和一些知识点的运用.和从前一样,我是人,离成神还有几十万里,所以无可避免的出现不严谨的地方甚至错误,请酌情阅读. 0x00 ...

  6. OSI参考模型对网络排错的指导

    问题 当我们遇到网络故障的时候,比如连不上网.打开浏览器无法正常访问等问题的时候,我们应该怎么排查呢? 我们首先想到的是物理层,因为在OSI参考模型中物理层是在最低端.最基础. 物理层排查 主要查看连 ...

  7. 【剑指Offer面试编程题】题目1384:二维数组中的查找--九度OJ

    题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含 ...

  8. Duilib自定义控件

    新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 在公司二期项目中为了将谷歌内核嵌入到duilib中,采用了自定义duilib控件的方法,由于也是第一次用duili ...

  9. 如何让浏览器的左上角显示自己的logo的小诀窍

    很简单,只需要在head头部加上以下代码 <link rel="icon" href="图片路径" type="image/x-icon&quo ...

  10. Tomcat能启动,无法访问方法,

    好像没有扫描到controller 好像配置文件都没有加载成功 项目启动后,目录下多出一个ssmtest.xml文件 D:\Program Files\JDK-tomcat\apache-tomcat ...