1,下载并安装mongodb
①下载地址:https://www.mongodb.com/download-center?jmp=nav#community
将下载的mongodb-linux-x86_64-3.6.2.tgz放置在centos的usr目录下
网盘下载:https://pan.baidu.com/s/1c4dcdig
②解压:mongodb-linux-x86_64-3.6.2.tgz
进入mongodb-linux-x86_64-3.6.2文件夹创建一个db文件夹
③启动mongodb
命令:bin/mongod --dbpath=db
默认端口号:27017
2,下载并安装robomongo可视化工具
①下载地址:https://robomongo.org/
网盘下载:https://pan.baidu.com/s/1oAl5kT0
3,连接mongodb服务器
mongodb客户端一直连接不上centos的mongodb服务器
启动mongodb服务须加上--bind_ip_all(例如:bin/mongod --dbpath=db --auth --bind_ip_all)
给mongodb服务器设置密码:
①./mongo 连接mongodb服务器(./mongo --port 27017 -u "userAdmin" -p "123" --authenticationDatabase "admin")
②use admin 切换至admin数据库
③db.createUser({user: "userAdmin",pwd: "123",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]}) 创建管理员用户,并指定其权限
mongodb 对应 sqlserver
database=》database
collection=》table
document=》row
1,基本操作
①创建database
②创建collection
③创建document
1,capped collection(固定集合)
①可视化设置固定集合
②代码创建固定集合
1)简单创建固定集合
db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )
2)复杂创建固定集合
db.createCollection(<name>, { capped: <boolean>, autoIndexId: <boolean>, size: <number>, max: <number>, storageEngine: <document>, validator: <document>, validationLevel: <string>, validationAction: <string>, indexOptionDefaults: <document> } )
3)将集合转换为固定集合
db.runCommand({"convertToCapped": "mycoll", size: 100000});
4)查看collection的状态
db.log.stats()
5)倒序查询
db.log.find().sort( { $natural: -1 } )
参考文档:https://docs.mongodb.com/manual/reference/bson-types/
| Type | Number | Alias | Notes |
|---|---|---|---|
| Double | 1 | “double” | |
| String | 2 | “string” | |
| Object | 3 | “object” | |
| Array | 4 | “array” | |
| Binary data | 5 | “binData” | |
| Undefined | 6 | “undefined” | Deprecated. |
| ObjectId | 7 | “objectId” | |
| Boolean | 8 | “bool” | |
| Date | 9 | “date” | |
| Null | 10 | “null” | |
| Regular Expression | 11 | “regex” | |
| DBPointer | 12 | “dbPointer” | Deprecated. |
| JavaScript | 13 | “javascript” | |
| Symbol | 14 | “symbol” | Deprecated. |
| JavaScript (with scope) | 15 | “javascriptWithScope” | |
| 32-bit integer | 16 | “int” | |
| Timestamp | 17 | “timestamp” | |
| 64-bit integer | 18 | “long” | |
| Decimal128 | 19 | “decimal” | New in version 3.4. |
| Min key | -1 | “minKey” | |
| Max key | 127 | “maxKey” |
1,通过find操作,用undefined做作为比较条件
printjson(db.mycollection.find({"name":{$type:6}}).toArray());
printjson(db.mycollection.find({"name":{$type:'undefined'}}).toArray());
2,Timestamps
var a = new Timestamp(); db.test.insertOne( { ts: a } );
1,创建和更改表
| SQL | Mongodb |
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" } ) |
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,插入数据
| SQL | Mongodb |
INSERT INTO people(user_id,
age,
status)
VALUES ("bcd001",
45,
"A")
|
db.people.insertOne(
{ user_id: "bcd001", age: 45, status: "A" }
)
|
3,查询数据
| SQL | Mongodb |
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/ } )
db.people.find( { user_id: { $regex: /bc/ } } )
|
SELECT *
FROM people
WHERE user_id like "bc%"
|
db.people.find( { user_id: /^bc/ } )
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()
db.people.find().count()
|
SELECT COUNT(user_id)
FROM people
|
db.people.count( { user_id: { $exists: true } } )
db.people.find( { user_id: { $exists: true } } ).count()
|
SELECT COUNT(*)
FROM people
WHERE age > 30
|
db.people.count( { age: { $gt: 30 } } )
db.people.find( { age: { $gt: 30 } } ).count()
|
SELECT DISTINCT(status)
FROM people
|
db.people.aggregate( [ { $group : { _id : "$status" } } ] )
db.people.distinct( "status" )
|
SELECT *
FROM people
LIMIT 1
|
db.people.findOne()
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,修改数据
| SQL | Mongodb |
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,删除数据
| SQL | Mongodb |
DELETE FROM people
WHERE status = "D"
|
db.people.deleteMany( { status: "D" } )
|
DELETE FROM people
|
db.people.deleteMany({})
|
| 比较运算符 | 备注 | 说明 | 用法 |
| $eq | = | equal |
{ <field>: { $eq: <value> } }
|
| $gt | > | greater than | {field: {$gt: value} } |
| $gte | >= | greater than equal | {field: {$gte: value} } |
| $lt | < | less than |
{field: {$lt: value} }
|
| $lte | <= | less than equal | { field: { $lte: value} } |
| $ne | != | not equal | {field: {$ne: value} }
|
| $in | in |
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
|
|
| $nin | !in | not in | { field: { $nin: [ <value1>, <value2> ... <valueN> ]} } |
1,测试数据
db.inventory.insert([ { _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }, { _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }, { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }, { _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }, { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }])
2,案例
①查询qty>=20的数据
db.inventory.find({"qty":{$gte:20}})
②查询item对象中的name为ab的数据
db.inventory.find({"item.name":{$eq:"ab"}})
db.inventory.find({"item.name":"ab"})
③查询tags集合中包含C的数据
db.inventory.find({tags:{$in:["C"]}})
④查询出tags集合为[ [ "A", "B" ], "C" ]的数据
db.inventory.find({tags:{$eq:[["A","B"],"C"]}})
1,$and
①使用方法: { $and: [ { <expression1> }, { <expression2> } , ... , {<expressionN> } ] }
②案例
db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )
db.inventory.find( { $and : [ { $or : [ { price : 0.99 }, { price : 1.99 } ] }, { $or : [ { sale : true }, { qty : { $lt : 20 } } ] } ] } )
2,$not
①使用方法: { field: { $not: { <operator-expression> } } }
②案例
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
db.inventory.find( { item: { $not: /^p.*/ } } )
3,$nor(or的反向)
①使用方法: { $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }
②案例
db.inventory.find( { $nor: [ { price: 1.99 }, { sale: true } ] } )
db.inventory.find( { $nor: [ { price: 1.99 }, { qty: { $lt: 20 } }, { sale: true } ] } )
4,$or
①使用方法: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
②案例
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
1,$exists(判断存不存在字段)
①使用方法: { field: { $exists: <boolean> } }
②案例
db.inventory.find( { qty: { $exists: true, $nin: [ 5, 15 ] } } )
2,$type
①使用方法: { field: { $type: <BSON type> } }
②案例
db.addressBook.find( { "zipCode" : { $type : "number" } } )
1,$expr【允许在查询语言中使用聚合表达式。】
①使用方法: { $expr: { <expression> } }
②案例
1)查询花费大于预算
{ "_id" : 1, "category" : "food", "budget": 400, "spent": 450 }
{ "_id" : 2, "category" : "drinks", "budget": 100, "spent": 150 }
{ "_id" : 3, "category" : "clothes", "budget": 100, "spent": 50 }
{ "_id" : 4, "category" : "misc", "budget": 500, "spent": 300 }
{ "_id" : 5, "category" : "travel", "budget": 200, "spent": 650 }