介绍
基于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);
});