Mongodb笔记

介绍

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

你可能感兴趣的:(Mongodb笔记)