NoSQL? 一起来看MongoDB

94 阅读2分钟

MongoDB

#Go #数据库

MongoDB概念

  • 数据库 =存放=》
    • 集合 =存放=〉
      • 文档
  • 集合和数据库都会自动在创建文档时创建

Pasted Graphic 26.png

MongoDB 基本操作

数据库操作

  • show dbs
  • use database
  • db

CRUD

  • db..insert() , 也可以用insertOne(), insertMany()
    • Doc以json格式, 但是key不用双引号包围
    • 可以同时插多个
    • 自动为doc添加_id 属性, 根据时间戳生成, 作为唯一标识, 也可以自己在添加时指定
  • Db..find() 返回的是一个数组
    • 无参/空对象, 查出所有文档
    • 可以传入对象(json), 作为条件 (有点像orm?)
    • findOne( ) 返回符合的第一个文档(不是数组了, 就是文档对象)
  • Db..update( 查询条件, 新对象(整个替换) ) =》 默认只改第一个, 改多个需要 updateMany( )
    • 如果只修改某个属性, 使用修改操作符, ¥operator:{ }
      • $set 修改指定属性
      • $unset 删除文档的指定属性
  • db..remove( )/ deleteOne( ) / deleteMany( )
    • 参数为 查询条件, 必须传参! 如果想删除全部, 需要传入空对象或者使用db..drop()
      • Drop的话连着collection也删除了, remove只删除了记录
    • 默认多删
    • 实际项目一般保留数据, 所谓的删除实际上是另设置的字段, 表示是否可见

文档间的关系

  • NoSQL
  • One to one
    • 内嵌文档
      • 在文档对象的内部, 再定义另一个字段的对象
  • One to many / many to one
    • 在多方的表里加入属性(得是能唯一标识的), 指明对应的是哪一个单方
  • Many to many
    • 添加数组属性, 表明所对应的文档

Sort和投影

  • 查询文档默认按_id 升序排列
    • 查询语句后面加 .sort( { : 1 } ) 来排序, 1为升, -1为降, 可以多个properties组合, 来指定排序的主序、副序
  • find( )的第二个参数, 可以传入一个对象来指明投影: Ep. { num : 1 } 1为true, 0为false

With Golang ..

ODM github.com/go-bongo/bo…

  1. Config
    1. ConnectString and DB
    2. Use Bongo.Connect(config) to connect to server.
  2. Documents
    1. Use structs to express the documents.
  3. CRUD
    1. **connection.Collection( ).**FindOne( )