初学mongodb

1.基于分布式的文档存储,以BSON存储

2.和mysql比,速度:无id插入mongodb>无id mysql插入>有id mysql插入>有id mongodb插入

总体来说插入的话mysql稳定多了,如果是读的业务比较多的话建议采用mongodb,它会充分使用电脑的资源

3.如何安装mongodb

https://www.mongodb.com/ 官网下载,有点慢

我是在这里下载的https://pan.baidu.com/s/1bpo1im7

windows版本

可以在C:\mongodb中手动创建两个空文件夹

C:\mongodb\data\db

C:\mongodb\log

并在C:\mongodb\log下面创建一个空的mongo.log 

再创建一个mongo.config

dbpath=D:\MongoDB\data\db

logpath=D:\MongoDB\log\mongo.log

bind_ip=0.0.0.0
logappend=true
port=27017
auth=false

!!!里面auth是是否开启验证

第一种启动

接下来在cmd右键管理员登录,输入

mongod --config D:\software\Mongodb\mongo.config --install --serviceName "MongoDB"

添加到服务里面,然后搜索服务里面是否有Mongodb的服务有的话证明成功了

另外每次修改,比如说修改auth为true时要重新启动服务

net start MongoDB

上面这个是启动服务

第二种启动

启动mongodb

mongod --dbpath C:\mongodb\data\db --logpath=C:\mongodb\log\mongodb.log --logappend

MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 –rest

mongod --dbpath=/data/db --rest

创建用户(那些db.addUser的狗带吧,应该是很久以前的版本了)

1 创建一个root用户:

use admin
db.createUser(
    {
      user: "root",
      pwd: "123456",
      roles: [ "root" ]
    }
)
2 创建admin用户

use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
3 创建具体数据库的用户

use test
db.createUser(
  {
    user: "test",
    pwd: "password",
    roles: [ { role: "userAdmin", db: "test" } ]
  }
)
最后都要认证一下

db.auth("user", "pwd")
返回1代表成功,0代表失败。

远程连接失败,即启动auth=true后重启服务,解决方法

> use admin 
switched to db admin 
>  var schema = db.system.version.findOne({"_id" : "authSchema"}) 
> schema.currentVersion = 3 
3 
> db.system.version.save(schema) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

Mongodb语句

数据库的插入和查询
./mongo
show dbs;//展示所有文档
db.users.insert({'name':'liwei'});//插入数据
show collections;//展示所有的集合
db.users.find();//查看所有集合
db.users.insert({'name':'yulong','sex':nan});//插入多条数据
db.users.find({"name":"liwei"});//根据条件查找
db.users.insertMany([
  {'name':'xiaohigh','age':10,'height':170},
  {'name':'canglaoshi','xiongwei':'d'}
]);//插入多行数据
db.users.find();
db.users.find().toArray();//将查询到的数据,组成一个数组对象

更新
db.users.update({name:'yulong'},{$set:{age:'20'}})

格式:db.users.update({条件},{更新的内容},upsert是否插入数据,multi是否更新多条数据)   注意:前两个是必写参数
upsert默认是false,true的话(upsert是如果找不到匹配的文档,则将插入一个新的文档到集合中。)
multi默认是false  是否更新多条数据

例子:

db.users.update({name:'liwei'},{$set:{chengji:60}},true);
//ture代表有没有,没有的话再插入一条
db.users.insert({'name':'gaodafeng'},{$set:{tel:110}},false,true);
移除
db.users.remove({});//删除所有数据
db.users.remove({name:'yulong'});//删除带条件的数据
db.users.drop();//删除整个集合

Mongodb提供特殊的索引

https://www.cnblogs.com/firstForEver/p/6854060.html

MongoDB的一个特色就是具有丰富的查询接口,比如地理位置查询。

  在地理位置查询上,MongoDB有着比传统关系型数据库的优势,下面举个例子。

  当前移动互联网应用,按用户离目标门店距离排序上的场景很多。

  比如:

  一张门店表shop_list,表结构字段包括shop_id,shop_name,lng,lat (门店id,门店名称,以及门店的经纬度等)。

  现收集到当前用户的所处位置的经纬度是,经度116.30759,纬度40.05748。获取距离用户1000m以内的100家门店,按照距离从近到远排序。

 MySql的查询语句如下:

复制代码
SELECT shop_id,shop_name,lng,lat, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((40.05748*PI()/180-lat*PI()/180)/2),2)+COS(40.05748*PI()/180)*COS(lat*PI()/180)*POW(SIN((116.30759*PI()/180-lng*PI()/180)/2),2)))*1000) AS distance
FROM shop_list
HAVING distance < 1000
ORDER BY distance LIMIT 100;
复制代码
  一个这样的计算方法,显然mysql性能比较差。

下面的这个计算方法更快一些,效果和上面的几乎差不多,只是距离distance并不真实。如果只想按照距离排序查出结果是没问题的。

复制代码
SELECT
    shop_id ,
    shop_name ,
    lng ,
    lat ,
    POWER(lat - 40.05748 , 2) + POWER(lng - 116.30759 , 2) * POWER(COS((lat + 40.05748) / 2) , 2) AS distance
FROM
    shop_list
HAVING
    distance < 1000
ORDER BY
    distance
LIMIT 100;
复制代码
 

 

  换做MongoDB会如何呢?

  首先,要明确MongoDB在使用距离查询时,存储的经纬度结构要类似这样才可以:

复制代码
'point' : [
    116.299,
    40.053
]


或者:

'point' : {
    'lng' : 116.299,
    'lat' : 40.053
}
复制代码
 

  然后给经纬度的point做一个2dSphere索引。具体参考官方文档: 

db.shop_list.createIndex({"point":"2dsphere"})
 

第三个用法可以得出距离值:

复制代码
#这个点的附近
db.shop_list.find({'point':{$nearSphere: [116.30759, 40.05748]}}) 

#这个点的附近1000米
db.shop_list.find({point: { $geoWithin: { $centerSphere: [ [ 116.30759, 40.05748 ], 1000/6378137 ] } } }) 

#这个点的附近1000米的10个门店,并且有距离计算值
db.runCommand({ geoNear : "shop_list" , near : [ 116.30759, 40.05748], num : 10 , spherical:true, distanceMultiplier: 6378137, maxDistance:1000/6378137})


4.第3方工具

rockmongo-on-windows-v0.0.4.zip

https://pan.baidu.com/s/1kVOPaxp

默认账号密码都是admin,在 web/rockmongo/config.php 文件里配置ip和端口再双击rockstart.bat启动服务即可

猜你喜欢

转载自blog.csdn.net/weixin_38336658/article/details/79838512