天天看点

mongodb常用语法及命令

mongodb常用语法及命令

创建用户:db.createUser({user:"xu",pwd:"123456",roles:[{role:"root",db:"admin"}]});
登录用户:db.auth('xu','123456')
创建数据库:
切换数据库:use databases;
           
1 术语和概念
SQL MongoDB
table   collection
row document或BSON document
column  field
index   index
table joins $lookup, 绑定文档
选定任一列作为主键   自定指定`_id`为主键
aggregation (e.g. group by) aggregation pipeline
2 创建与改变
SQL语句===========================MongoDB语句
CREATE TABLE people ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(), age Number, status char(), PRIMARY KEY (id) )==============   db.people.insertOne( { user_id: "abc123", age: , 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:  } )
CREATE INDEX idx_user_id_asc_age_desc ON people(user_id, age DESC)==============    db.people.createIndex( { user_id: , age: - } )
CREATE INDEX idx_user_id_asc_age_desc ON people(user_id, age DESC)==============    db.people.createIndex( { user_id: , age: - } )
DROP TABLE people============== db.people.drop()
 插入
SQL INSERT==============    MongoDB insertOne()
INSERT INTO people(user_id, age, status) VALUES ("bcd001", , "A")
==============db.people.insertOne( { user_id: "bcd001", age: , status: "A" } )
 选择查询
SQL SELECT  MongoDB find()
SELECT * FROM people==============  db.people.find()
SELECT id, user_id, status FROM people==============    db.people.find( { }, { user_id: , status:  } )
SELECT user_id, status FROM people==============    db.people.find( { }, { user_id: , status: , _id:  } )
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: , status: , _id:  } )
SELECT * FROM people WHERE status != "A"==============  db.people.find( { status: { $ne: "A" } } )
SELECT * FROM people WHERE status = "A" AND age = ==============  db.people.find( { status: "A", age:  } )
SELECT * FROM people WHERE status = "A" OR age = ==============   db.people.find( { $or: [ { status: "A" } , { age:  } ] } )
SELECT * FROM people WHERE age > ==============   db.people.find( { age: { $gt:  } } )
SELECT * FROM people WHERE age < ==============   db.people.find( { age: { $lt:  } } )
SELECT * FROM people WHERE age >  AND age <= ============== db.people.find( { age: { $gt: , $lte:  } } )
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:  } )
SELECT * FROM people WHERE status = "A" ORDER BY user_id DESC============== db.people.find( { status: "A" } ).sort( { user_id: - } )
SELECT * FROM people WHERE status = "A" ORDER BY user_id DESC============== db.people.find( { status: "A" } ).sort( { user_id: - } )
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 >   ==============db.people.count( { age: { $gt:  } } ) or db.people.find( { age: { $gt:  } } ).count()
SELECT DISTINCT(status) FROM people==============   db.people.distinct( "status" )
SELECT * FROM people LIMIT ==============  db.people.findOne() or db.people.find().limit()
SELECT * FROM people LIMIT  SKIP ==============  db.people.find().limit().skip()
EXPLAIN SELECT * FROM people WHERE status = "A"==============   db.people.find( { status: "A" } ).explain()
 修改数据
SQL Update==============    MongoDB updateMany()
UPDATE people SET status = "C" WHERE age > ============== db.people.updateMany( { age: { $gt:  } }, { $set: { status: "C" } } )
UPDATE people SET age = age +  WHERE status = "A"  db.people.updateMany( { status: "A" } , { $inc: { age:  } } )
 删除数据
SQL Delete==============    MongoDB deleteMany()
DELETE FROM people WHERE status = "D"============== db.people.deleteMany( { status: "D" } )
DELETE FROM people==============    db.people.deleteMany({})
           
1.分片
在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
2.为什么使用分片
复制所有的写入操作到主节点
延迟的敏感数据会在主节点查询
单个副本集限制在12个节点
当请求量巨大时会出现内存不足。
本地磁盘不足
垂直扩展价格昂贵
           
mongodb中的表关联
A表:
db.product.insert({"_id":,"productname":"商品1","price":})
db.product.insert({"_id":,"productname":"商品2","price":})
B表:
db.orders.insert({"_id":,"pid":,"ordername":"订单1"})
db.orders.insert({"_id":,"pid":,"ordername":"订单2"})
db.orders.insert({"_id":,"pid":,"ordername":"订单3"})
db.orders.insert({"_id":,"pid":,"ordername":"订单4"})
查询
db.product.find()
db.orders.find()
$lookup表关联用法:
------------------------------------
db.product.aggregate([
    {
      $lookup:
        {
          from: "orders",
          localField: "_id",
          foreignField: "pid",
          as: "inventory_docs"
        }
   }
])
------------------------------------
$lookup中的参数:
from:需要关联的表【orders】
localField: 【product】表需要关联的键。
foreignField:【orders】的matching key。
as:对应的外键集合的数据,【因为可能是一对多的】
$match筛选:
----------------------------------------
db.product.aggregate([
    {
      $lookup:
        {
          from: "orders",
          localField: "_id",
          foreignField: "pid",
          as: "inventory_docs"
        }
   },
   { $match : { price : {$gt:} } }
])
-----------------------------------------
$project 挑选字段:
-----------------------------------------
db.product.aggregate([
    {
      $lookup:
        {
          from: "orders",
          localField: "_id",
          foreignField: "pid",
          as: "inventory_docs"
        }
   },
   { $match : { price : {$gt:} } },
   {$project: { "inventory_docs": ,"_id": } }

])
-----------------------------------------
           
mongodb.jdbc配置:

mongo.host=.xxx.xxx
mongo.port=
mongo.defaultDbName=mylearndb
#mongo.user=joyven
#mongo.pwd=123456
mongo.connectionsPerHost=
mongo.threadsAllowedToBlockForConnectionMultiplier=
mongo.minConnectionsPerHost=
#\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
mongo.connectTimeout=
#\u7B49\u5F85\u65F6\u95F4
mongo.maxWaitTime=
#Socket\u8D85\u65F6\u65F6\u95F4
mongo.socketTimeout=
mongo.socketKeepAlive=true
mongo.description=joyven test mongodb database
mongo.maxConnectionIdleTime=
mongo.maxConnectionLifeTime=
#mongo slave
mongo.heartbeatSocketTimeout=
mongo.heartbeatConnectTimeout=
mongo.minHeartbeatFrequency=
mongo.heartbeatFrequency=