MongoDB 初学

安装

安装文档:https://www.runoob.com/mongodb/mongodb-osx-install.html

运行 MongoDB

上面选择了brew安装mongo,因此下面也使用该方法运行mongo。

我们可以使用 brew 命令或 mongod 命令来启动服务。

brew 启动:

brew services start [email protected]

brew 停止:

brew services stop [email protected]

mongod 命令后台进程方式:

mongod --config /usr/local/etc/mongod.conf --fork

这种方式启动要关闭可以进入 mongo shell 控制台来实现:

> db.adminCommand({ "shutdown" : 1 })

运行mongodb

cd /usr/local/opt/[email protected]/bin
./mongo

快速入门

启动服务:service mongod start

后台启动mongo,日志输出到文件中:mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork

  • –dbpath 设置数据存放目录
  • –logpath 设置日志存放目录
  • –fork 在后台运行

直接启动,日志输入到控制台上:mongod --config /usr/local/etc/mongod.conf

启动成功后返回:

lena@LENALIN-MB0 var % mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 33815
child process started successfully, parent exiting

查看服务是否启动:ps aux | grep -v grep | grep mongod

lena@LENALIN-MB0 var % ps aux | grep -v grep | grep mongod
lena             33815   0.0  0.1  5129252  23780   ??  S     2:54PM   0:01.20 mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
  • 配置文件:/usr/local/etc/mongod.conf
  • 日志文件路径:/usr/local/var/log/mongodb
  • 数据存放路径:/usr/local/var/mongodb

数据库操作

查看所有数据库:show dbs

查看当前数据库:db

创建/切换到数据库:use 数据库名

删除数据库:db.数据库名.dropDatabase()

集合操作

创建集合

文档:https://www.runoob.com/mongodb/mongodb-create-collection.html

语法:db.createCollection(name[, options])

  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项
    • size(数值):为固定集合指定一个最大值,即字节数。
    • capped(bool):如果为 true,则创建固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
      当该值为 true 时,必须指定 size 参数。
    • max(数值):指定固定集合中包含文档的最大数量。
    • 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

例如:不指定options创建集合:

> db.createCollection("lena")
{
    
     "ok" : 1 }
> show collections
lena

指定options创建集合

> db.createCollection("test",{
    
    capped:true,size:2})
{
    
     "ok" : 1 }
> db
test

查看集合

查看所有集合:show collectionsshow tables

删除集合

语法:db.集合名称.drop()

返回值:成功返回true;失败返回false

文档操作

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

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

插入文档

语法:db.集合名.insert(document)

  • 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
  • 如果要插入的集合不存在,则会自动创建该集合并插入文档。
  • document是由key,value组成的 如{“title”:“nihao”,“add”:true}

插入一个新文档:db.collection.insertOne(document,{writeConcern: <document>})

  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。可选。

插入一个或多个文档:db.集合名.insertMany([document1,document2...],{writeConcern: <document>,ordered:<boolean>)

  • ordered:指定是否按顺序写入,默认 true,按顺序写入。可选。

插入一个变量:将数据赋值给变量,然后插入该变量到集合中

> document=({
    
    title:'hello'})
{
    
    
	"title":"hello"
}
> db.集合名.insert(document)
WriteResult({
    
     "nInserted" : 1 })

查看文档

查看已插入文档:db.集合名.find(query,projection)

  • query :可选,使用查询操作符指定查询条件
  • projection :可选,指定查询返回的键值对。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)

以格式化方式显示所有文档,使用pretty()方法:db.集合名.find().pretty()

只查询一个文档:db.集合名.findOne()

limit()

指定查询记录的数量,语法:db.集合名.find(...).limit(数字)

skip()

跳过指定数量的记录,语法:db.集合名.find(...).limit(数字).skip(数字)

sort()

指定参数对查询的数据进行排序,1表示升序,-1表示降序:db.集合名.find().sort({<key>:1/-1})

更新文档

更新已存在的文档:

db.集合名.update(
   <query>,
   <update>,
   {
    
    
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
  • query : update的查询条件,类似sql update查询内where后面的。

  • update : update的对象和一些更新的操作符(如KaTeX parse error: Expected '}', got 'EOF' at end of input: …ongoDB 教程'},{**set**:{‘title’:‘菜鸟MongoDB’}}),只会更新找到的第一条文档,若需要更新多条要设置multi参数为true。

    $ 格式 含义
    in {,{$in:[,…]}} 返回key值符合value1/value2…的元素
    inc {"$inc":{:}} key值自增/自减value
    set {"$set":{:}} key值设置为value
    {:} 等于
    lt {:{$lt:}} 小于
    lte {:{$lte:}} 小于等于
    gt {:{$gt:}} 大于
    gte {:{$gte:}} 大于等于
    ne {:{$ne:}} 不等于
    {:,:} and
    {$or:[:,:]} or
    type {:{$type:}} key数据类型是否为value

    mongo拥有的数据类型:https://www.runoob.com/mongodb/mongodb-operators-type.html

  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

  • writeConcern :可选,抛出异常的级别。

_id存在则更新,不存在则新增:db.集合名.save(<document>,{writeConcern: <document>})

  • writeConcern :可选,抛出异常的级别。

删除文档

语法:db.集合名.remove(<query>,{justOne: <boolean>,writeConcern: <document>})

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

索引

创建索引:db.集合名.createIndex(keys,options)

  • keys:是要添加索引的字段,一个或多个

  • options:可选参数(以下表格来源:https://www.runoob.com/mongodb/mongodb-indexing.html)

    参数 类型 描述
    background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false
    unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
    name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
    dropDups Boolean **3.0+版本已废弃。**在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
    sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
    expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
    v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
    weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
    default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
    language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

聚合

主要用于求平均值、求和等情况。

语法:db.集合名.aggregate([{$group:{分组规则,聚合语法}}])

  • 分组规则:一般是以_id作为分组规则
  • 聚合语法:如下表,可以进行求和/求平均/… 指明要聚合的字段 同时要自定义一个key作为返回的键

例如,求每个作者(by_user)所写的文章个数:db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

$ 语法 描述(前提:在当前分组)
sum :{$sum:} 求和preKey的值 作为key的value返回
avg :{$avg:} 求preKey的平均值 作为key的value返回
min :{$min:} 求preKey中的最小值 作为key的value返回
max :{$max:} 求preKey中的最大值作为key的value返回
push :{$push:} 将value加入到key中 不会判断是否有重复的值
addToSet :{$addToSet:} 将value加入到key中 会判断是否有重复的值(若存在则不加入)
first :{$first:} 获取preKey中第一个文档数据 作为key的value返回
last :{$last:} 获取preKey中最后一个文档数据 作为key的value返回

管道

语法:db.article.aggregate(...)

$ 语法 描述 例子
project {$project:{:1/0}} 控制输出字段 1表示输出 0表示不输出 _id默认是被包含的 {$project:{_id:0,title:1}}
match {$match:{:{过滤条件}} 过滤数据 只输出符合文档的数据 { $match : { score : { $gt : 70, $lte : 90 } } }
limit {$limit:{:}} 限制返回文档数value
skip {$skip:{:}} 跳过文档数
unwind 将文档中某一数组类型字段拆分多条 每条包含一个值
group 文档分组 用于统计/求平均等情况 [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ]
sort 排序
geoNear 输出接近某一地理位置的有序文档

参考

[1] 菜鸟教程

Golang操作mongo可参考文章:https://blog.csdn.net/lena7/article/details/123003131

猜你喜欢

转载自blog.csdn.net/lena7/article/details/122857996