MongoDB 是什么

  1. 是一个高性能,开源,无模式的文档型数据库,
  2. 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
  3. 他支持的数据结构非常松散,采用的是类似 json 的 bjson 格式来存储数据,因此可以存储比较复杂的数据类型。Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

下图展示了 mysql 和 mongoDB 之间的对应关系,我们可以看出来非常的方便,但是 mongoDB 的性能非常好。 mongo Vs Mysql

优缺点

优点:

  1. 社区活跃,用户较多,应用广泛
  2. MongoDB 在内存充足的情况下数据都放入内存且有完整的索引支持,查询效率较高
  3. MongoDB 的分片机制,支持海量数据的存储和扩展

缺点:

  1. 不支持事务
  2. 不支持 join、复杂查询

go 基本操作

  1. 链接
s, err := mgo.Dial(addr)
.Close()
  1. 参数设置
s.SetMode(mgo.Monotonic, true)
s.SetPoolLimit(maxPoolLimit)
s.SetSocketTimeout(timeout * time.Second)
  1. 建表
   s.DB(k).C(i).Create(&info)
  1. 查询
Find(bson.M{"_id": id}).One(ret)
Find(nil).All()
bson.M{"_id": id}
bson.M{}
bson.M  map[string]interface
  1. 修改
bson.M{"$push": bson.M{"tasks": ret}}

bson.M{"tasks.id": id},
  bson.M{"$set": bson.M{
   "tasks.$.status": status,
   "tasks.$.msg":    msg,
  }}

mongo 遇到正则的坑

logmsg 存在这一条数据 { “_id” : NumberLong(447187), “msg” : “(模糊)详情:ap2(模糊查询包含括号)” }

需求: 模糊匹配 (模糊)详情

现在使用匹配查询

db.logmsg.find({msg:{$regex:/(模糊)详情/}); 查询不到数据 db.logmsg.find({msg:{$regex:/模糊/}); 去掉括号后可以查询到数据

已解决:加上转义

db.logmsg.find({msg:{$regex:/(模糊)详情/}); 查询不到数据

db.logmsg.find({msg:{$regex:“\(模糊\)详情"}); 可以查询数据