MongoDb 初入

时间:2022-07-22
本文章向大家介绍MongoDb 初入,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

mongodb适用于经常要进行操作的应用系统,适应于读写性能要求极高的场景,Hadoop则侧重于对数据的统计分析的应用。 同时mongo的处理时延一般在10ms,而Hadoop一般进行离线分析,通过mapreduce分析,一般时延较长。但是当业务中存在大量的复杂逻辑操作,不要用mongodb数据库。

mongodb 优势

  • 它将热数据存储于内存中,使得热数据的读写变得非常快,从而提高了整体的速度与效率。
  • 高可扩展性,Mongodb的高可用与集群架构,通过物理机的增加和分片的增加,使mongodb扩展到很快的速度。
  • 自身的failover机制,当主库遇到问题,副本将选举一个新主库替代主库。
  • json的数据格式易于查询和学习

mongodb 特性

mongo是非关系型数据库,存储方式是虚拟内存+持久化,通过副本集,以及分片来实现高可用。

SQL术语/概念

MongoDB术语/概念

database

database

table

collection

row

document

column

field

index

index

table join

primary key

primary key

connect

mongo 127.0.0.1/admin -u root -p ******

admin代表的是权限db,使用默认端口27017

CUID

mongo的数据库操作和mysql基本一致,将关键字对应后可基本安装mysql进行操作。

//create db

use DATABASE_NAME

// show database

show dbs

//insert

db.runoob.insert({"name":"菜鸟"})

//delete

db.dropDatabase()

//创建集合

use test

db.createCollection("runoob")

show collections

db.mycol2.insert({"name" : "菜鸟"})

db.mycol2.drop()

//创建文档

db.COLLECTION_NAME.insert(document)

db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

db.col.find()

可以将数据定义到变量
 document=({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});

db.col.insert(document)

//更新文档

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

//删除文档

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

db.col.remove({'title':'MongoDB 教程'})

//查询文档

db.col.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

db.col.find({key1:value1, key2:value2}).pretty()

db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

查询 title 包含"教"字的文档:

db.col.find({title:/教/})

查询 title 字段以"教"字开头的文档:

db.col.find({title:/^教/})

查询 titl e字段以"教"字结尾的文档:

db.col.find({title:/教$/})

如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
db.col.find({"title" : {$type : 'string'}})

db.COLLECTION_NAME.find().limit(NUMBER)

//排序

1 为升序排列,而 -1 是用于降序排列。

db.col.find({},{"title":1,_id:0}).sort({"likes":-1})

//索引

1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可

db.collection.createIndex(keys, options)

db.values.createIndex({open: 1, close: 1}, {background: true})

创建索引时加 background:true 的选项,让创建工作在后台执行

//聚合

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

select by_user, count(*) from mycol group by by_user

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])