mongodb 官网示例

1.安装

最新版本为4.0.6,装完可以执行mongo -version查看

下载tar包,解压完

 

确实够简洁呀,就bin目录,然后在/etc/profile配下环境变量source下就ok!

创建db目录

mkdir -p /data/db

官网还让创建/var/lib/mongo和/var/log/mongo,创建完启动发现这俩目录也没写入数据。

2.启动

临时启动

mongod

看到等待端口连接就ok了,貌似3.2以后不提供web ui界面了,28017端口无法访问了。

可以下载一个RoBo 3T,供可视化。

默认外网无法连接,可以临时启动时,加--bind_ip_all,或者--bind_ip <address>指定ip

 mongod --bind_ip_all

 也可以创建配置文件,然后启动的时候

mongod -f 配置文件

后台启动

nohup或者&

3.与mysql对比

官网截的图,mongo的collection就是mysql的table,document文档就是row,

而field字段就是column,都是三层结构。

下面是RoBo 3T的截图

类似json数据,每个文档document都有一个类型为ObjectId的_id。

4.mongo的curd

1.查看数据库

show dbs

2.查看当前数据库

db

3.进入某个数据库/如果不存在,新建

use dbName

库无数据的话,此时show dbs,看不到该库

4.查看库的collection

show collections

5.创建collection

collection刚创建无数据时,show collections,看不到该collection

db.newCollection

6.插入数据

db.newCollection.insertOne({x:1})

7.插入多条

db.zlq.insertMany([
   // MongoDB adds the _id field with an ObjectId if _id is not present
   { item: "journal", qty: 25, status: "A",
       size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] },
   { item: "notebook", qty: 50, status: "A",
       size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] },
   { item: "paper", qty: 100, status: "D",
       size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank", "plain" ] },
   { item: "planner", qty: 75, status: "D",
       size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] },
   { item: "postcard", qty: 45, status: "A",
       size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] }
]);

8.查collection所有数据

db.zlq.find( {} )

9.过滤

db.zlq.find( { status: "D" } )
//select * from zlq where status="D"

10.匹配嵌入的document/类似json数组的小json

db.zlq.find( { size: { h: 14, w: 21, uom: "cm" } } )

11.匹配嵌入document的字段

db.zlq.find( { "size.uom": "in" } )

12.匹配数组里的字段

db.zlq.find( { tags: "red" } )

13.匹配数组

db.zlq.find( { tags: ["red", "blank"] } )
//这样的话tags:["red","blank","blue"]匹配不到

 14.删库/删collection

db.dropDatabase()
db.zlq.drop()

15.删document

db.zlq.deleteOne({status:"D"})//只删除一行,即使多行符合
db.zlq.deleteMany({status:"A"})

 5.mongo的aggregation

db.zlq.aggregate([ {$group:{_id:"$status",total:{$sum:"$qty"}}}])
//select status,sum(qty) from zlq group by status

 

mongo的mapreduce

对于熟悉hadoop的,就很容易理解了。

 

官网截的图,首先将每条数据map成key,value,hadoop的话,执行reduce相同的key会聚合成

key,Iterator(value),mongo的话是key,Array(value),然后执行sum

 

先过滤,再map-->reduce

distinct,返回一个数组

 

6.与mysql curd对比 

<1>create&alter

sqlmongob
CREATE TABLE people (
    id MEDIUMINT NOT NULL
        AUTO_INCREMENT,
    user_id Varchar(30),
    age Number,
    status char(1),
    PRIMARY KEY (id)
)
db.people.insertOne( {
    user_id: "abc123",
    age: 55,
    status: "A"
 } )

db.createCollection("people")

ALTER TABLE people
ADD join_date DATETIME
db.people.updateMany(
    { },
    { $set: { join_date: new Date() } }
)
ALTER TABLE people
DROP COLUMN join_date
db.people.updateMany(
    { },
    { $unset: { "join_date": "" } }
)
CREATE INDEX idx_user_id_asc
ON people(user_id)
db.people.createIndex( { user_id: 1 } )
CREATE INDEX
       idx_user_id_asc_age_desc
ON people(user_id, age DESC)
db.people.createIndex( { user_id: 1, age: -1 } )

DROP TABLE people
db.people.drop()

<2>insert

INSERT INTO people(user_id,
                  age,
                  status)
VALUES ("bcd001",
        45,
        "A")
db.people.insertOne(
   { user_id: "bcd001", age: 45, status: "A" }
)

<3>select 

SELECT *
FROM people
db.people.find()
SELECT id,
       user_id,
       status
FROM people
db.people.find(
    { },
    { user_id: 1, status: 1 }
)
SELECT user_id, status
FROM people
db.people.find(
    { },
    { user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status = "A"
db.people.find(
    { status: "A" }
)
SELECT user_id, status
FROM people
WHERE status = "A"
db.people.find(
    { status: "A" },
    { user_id: 1, status: 1, _id: 0 }
)
SELECT *
FROM people
WHERE status != "A"
db.people.find(
    { status: { $ne: "A" } }
)
SELECT *
FROM people
WHERE status = "A"
AND age = 50
db.people.find(
    { status: "A",
      age: 50 }
)
SELECT *
FROM people
WHERE status = "A"
OR age = 50
db.people.find(
    { $or: [ { status: "A" } , { age: 50 } ] }
)
SELECT *
FROM people
WHERE age > 25
db.people.find(
    { age: { $gt: 25 } }
)
SELECT *
FROM people
WHERE age < 25
db.people.find(
   { age: { $lt: 25 } }
)
SELECT *
FROM people
WHERE age > 25
AND   age <= 50
db.people.find(
   { age: { $gt: 25, $lte: 50 } }
)
SELECT *
FROM people
WHERE user_id like "%bc%"
db.people.find( { user_id: /bc/ } )

-or-

db.people.find( { user_id: { $regex: /bc/ } } )
SELECT *
FROM people
WHERE user_id like "bc%"
db.people.find( { user_id: /^bc/ } )

-or-

db.people.find( { user_id: { $regex: /^bc/ } } )
SELECT *
FROM people
WHERE status = "A"
ORDER BY user_id ASC
db.people.find( { status: "A" } ).sort( { user_id: 1 } )
SELECT *
FROM people
WHERE status = "A"
ORDER BY user_id DESC
db.people.find( { status: "A" } ).sort( { user_id: -1 } )
SELECT COUNT(*)
FROM people
db.people.count()

or

db.people.find().count()
SELECT COUNT(user_id)
FROM people
db.people.count( { user_id: { $exists: true } } )

or

db.people.find( { user_id: { $exists: true } } ).count()
SELECT COUNT(*)
FROM people
WHERE age > 30
db.people.count( { age: { $gt: 30 } } )

or

db.people.find( { age: { $gt: 30 } } ).count()
SELECT DISTINCT(status)
FROM people
db.people.aggregate( [ { $group : { _id : "$status" } } ] )

or, for distinct value sets that do not exceed the BSON size limit

db.people.distinct( "status" )
SELECT *
FROM people
LIMIT 1
db.people.findOne()

or

db.people.find().limit(1)
SELECT *
FROM people
LIMIT 5
SKIP 10
db.people.find().limit(5).skip(10)
EXPLAIN SELECT *
FROM people
WHERE status = "A"
db.people.find( { status: "A" } ).explain()

<4>update 

UPDATE people
SET status = "C"
WHERE age > 25
db.people.updateMany(
   { age: { $gt: 25 } },
   { $set: { status: "C" } }
)
UPDATE people
SET age = age + 3
WHERE status = "A"
db.people.updateMany(
   { status: "A" } ,
   { $inc: { age: 3 } }
)

<5> delete Records

DELETE FROM people
WHERE status = "D"
db.people.deleteMany( { status: "D" } )
DELETE FROM people
db.people.deleteMany({})

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值