介绍
基于v8引擎的文档型数据库
安装
二进制包解压就可以使用
bsondump # 导出bson结构
mongo # 客户端
mongod # 服务端
mongodump # 整体数据导出(二进制)
mongoexport # 导出json或csv
mongoimpoort # 导入
mongooplog # 日志
mongoperf #
mongorestore # 整体导入
mongos # 路由器,做集群使用
mongosniff #
mongostat #
mongotop #
启动服务
mongod
--dbpath # 数据存放路径
--logpath # 日志存放路径
--fork # 在后台运行
--port # 端口,默认27017
例如:
mongod --dbpath=/data/ --logpath=/data/a.log --fork --port 27017
连接数据库
mongo # 直接运行即可
入门命令
查看数据库
show databases # 查看数据库
show dbs
选中和创建数据库
use <数据库名称> # 有则选中,无则隐式创建
查看集合(表)
show collections
# 或
show tables
创建集合(表)
db.createCollection('表名称')
删除集合
db.集合名.drop()
删除数据库
use <数据库名> # 先选中,再删除
db.dropDatabase()
增
# 增加单条数据
db.表名.insert({
"key":"val"
})
# 增加多条数据
db.表名.insert([
{"key":"val"},
{"key":"val"}
])
备注:默认会带上
_id
删
db.表名.remove({
# 查询表达式,如像此例为空则全部删除
})
db.表名.remove({
"age":20
})
# 第二个参数设置为真则每次只会删除一行
db.表名.remove({
"age":20
},true)
改
db.表名.update(
{"age":"20"}, # 查询表达式
{"age":"22"} # 整个改为
)
db.表名.update(
{"age":"20"}, # 查询表达式
{$set:{
"age":22
}} # 只修改该列
)
修改的赋值表达式
$set # 修改某列
$unset # 删除某列
$rename # 重命名某列
$inc # 增长某列
$setOnInsert # upsert为true,且发生了insert操作时,可补充的字段
# 可选参数
upsert # 无匹配结果,则直接插入,(即:有则改,无则增加)例如:
# 例如
db.表名.update(
{"age":"20"},
{$set:{
"age":22
}},
{"upsert":true}
)
查
db.表名.find(
{}, # 查询表达式
{} # 要查询的列
)
# 查询名称为“zs”的年龄"age",第二个参数不传则是查询全部的列
db.表名.find(
{"name":"zs"},
{"age":1}
)
# 只查询一行
db.表名.findOne(
{}, # 查询表达式
{} # 要查询的列
)
查询表达式
$ne
不等于
# 查询age不等于19
db.表名.find({
"age":{
$ne:19
}
})
$gt
大于
无
$lt
小于
无
gte
大于等于
无
lte
小于等于
无
$in
包含多个条件的
# 查询age等于19,20,21的
db.表名.find({
"age":{
$in:[19,20,21]
}
})
$nin
不包含多个条件的
# 查询age不等于19,20,21的
db.表名.find({
"age":{
$nin:[19,20,21]
}
})
$all
查询某列,且至少包含多个条件的
# 查询field列至少包含1,2的(field是一个数组)
db.表名.find({
"field":{
$all:[1,2]
}
})
$exists
查询含有某列字段的文档
# 查询含有age属性的且年龄不等于19的
db.表名.find({
"age":{
$ne:19,
$exists:1
}
})
$or
查询满足多个条件任一一个的
# 查询年龄等于19或是男生的
db.表名.find({
$or:[
{"age":19},
{"sex":"male"}
]
})
$mod
将查询的值除以第一个给定的值,若余数等于第二个给定的值,则返回该结果
db.表名.find({
"age":{
$mod:[11,0]
}
})
$not
查询不包括条件的
# 通常与正则联合使用查询那些与特定模式不匹配的文档
db.表名.find({
"age":{
$not:{$mod:[11,0]}
}
})
$where
遍历查询
# 查询age等于19的男生(性能低下,不推荐使用)
db.表名.find({
$where:"this.age==19 && this.sex == 'male'"
})
游标操作
游标即查询出来返回的资源
# 声明游标,即将结果保存至变量
let cursor = db.表名.find();
# 判断是游标是否已经还有下一个
cursor.hasNext()
# 取出游标下一个单元
cursor.Next()
# 使用来取出,例如以下几个例子:
white(data.hasNext()){
printjson(data.next());
};
# 或
for(var doc = true,cursor.hasNext()){
printjson(data.next());
}
# 或
for(var doc = true,cursor.hasNext()){
printjson(data.next());
}
# 或
cursor.forEach((obj)=>{
printjson(obj);
});