基础CRUD
插入对象
db.<集合>.insertOne(json对象)或者db.<集合>.insertMany(json对象...)
对象查询
db.<集合>.find(条件),条件也是json文档的形式,和sql中的select操作类似,mql也提供了一系列过滤操作。
![](https://img.haomeiwen.com/i11371387/9b4aa8d5a4d45995.png)
![](https://img.haomeiwen.com/i11371387/3b839679952aec5d.png)
mql也支持用field.sub_field的形式过滤子文档
对象更新
db.<集合>.updateOne(<查询条件>,<更新字段>) 注:updateOne只更新匹配的一条,updateMany匹配多少条更新多少条
如db.movies.updateOne({id:1},{$set:{title:"abc"}})
而update更新数组还可以使用更多关键字
![](https://img.haomeiwen.com/i11371387/5febccdc1b20661a.png)
聚合运算
聚合运算的一般格式就是
db.<集合>.aggregate(pipeline),其中pipeline就是一连串的步骤,mongo支持的步骤有
![](https://img.haomeiwen.com/i11371387/ea258a2875ffc10d.png)
比如要完成一次稍微复杂点的查询,查1998年上映的电影数量少于10部的国家
db.movies.aggregate([{$match:{year:1998}},$group:{id:“country”,movie_num:{$sum:1}},$match:{movie_num:{$lt:10}}])
在Mql中还有mongo特有的步骤,比如unwind,作用是对文档的数组进行展开以更好的进行数据分析,比如
{
name:"马大爷"
age:19
book:[
{name:"booka",year:"2010"}
{name:"bookb",year:"2011"}
]
}
使用db.person.aggregate([$unwind:"$book"])查询后返回
{name:"马大爷",age:19,book:{name:"booka",year:"2010"}}
{name:"马大爷",age:19,book:{name:"bookb",year:"2011"}}
MongoDB的复制集
mongoDB通过复制集来完成高可用和数据容灾等需要,一般来说一个复制集中有至少三个节点,其中只有一个primary节点负责数据写入和选举时投票,而其他的secondary节点则负责复制主节点的数据和投票。在主节点上的操作会被记入oplog中,从节点就是靠在主节点的oplog上打开一个游标来不断获取新的oplog,更新自己的数据。复制集中的主节点如果故障,则会发起投票选举新的主节点,新的主节点除了要获得大多数的选票,还应该具有更新的oplog和较高的优先级(如果进行了配置)。复制集中的子节点还可以配置延迟参数延迟一定时间同步主节点数据以实现数据回滚的操作
网友评论