MongoDB 简介
MongoDB 是什么
- 是一个高性能,开源,无模式的文档型数据库,
- 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
- 他支持的数据结构非常松散,采用的是类似 json 的 bjson 格式来存储数据,因此可以存储比较复杂的数据类型。Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
下图展示了 mysql 和 mongoDB 之间的对应关系,我们可以看出来非常的方便,但是 mongoDB 的性能非常好。
优缺点
优点:
- 社区活跃,用户较多,应用广泛
- MongoDB 在内存充足的情况下数据都放入内存且有完整的索引支持,查询效率较高
- MongoDB 的分片机制,支持海量数据的存储和扩展
缺点:
- 不支持事务
- 不支持 join、复杂查询
go 基本操作
- 链接
s, err := mgo.Dial(addr)
.Close()
- 参数设置
s.SetMode(mgo.Monotonic, true)
s.SetPoolLimit(maxPoolLimit)
s.SetSocketTimeout(timeout * time.Second)
- 建表
s.DB(k).C(i).Create(&info)
- 查询
Find(bson.M{"_id": id}).One(ret)
Find(nil).All()
bson.M{"_id": id}
bson.M{}
bson.M map[string]interface
- 修改
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:“\(模糊\)详情"}); 可以查询数据
- 原文作者:战神西红柿
- 原文链接:https://tomatoares.github.io/posts/database/MongoDB-%E7%AE%80%E4%BB%8B/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。