mongodb使用

mongodb

文档地址 https://docs.mongodb.com/manual/tutorial/getting-started/

数据库命令

常用命令解释
■■show dbs查看数据库列表
■■use 数据库名切换到数据库
■■use 数据库名创建数据库(需要手动插入一条记录)
■■db显示数据库名

以下命令都以db.开头,通过db.help()获取

常用命令解释
help()帮助
■■getName()显示数据库名
adminCommand(nameOrDocument)切换到admin数据库,并运行命令[只调用db.runCommand(…)]
aggregate(pipeline,选项)在此数据库上执行无集合聚合;返回一个游标
auth(用户名,密码)
cloneDatabase(主机名)克隆数据库
commandHelp(命令名)命令帮助
copyDatabase(fromdb,todb,fromhost)拷贝数据库
createCollection(集合名,选项)显示创建集合
createView(视图名,viewOn,操作,选项)创建视图
createUser(用户名文档)创建用户
currentOp()显示数据库中当前正在执行的操作
dropDatabase()删除数据库
dropUser(用户名)删除用户
eval()过时
fsyncLock()将数据刷新到磁盘并锁定服务器以进行备份
fsyncUnlock()在db.fsyncLock()之后解锁服务器
getCollection(集合名)获取集合信息
getCollectionInfos(过滤器)集合信息
getCollectionNames()所有集合名
getLastError()
getLastErrorObj()
getLogComponents()
getMongo()获取服务器连接对象
getMongo().setSlaveOk()允许在复制从属服务器上进行查询
getPrevError()
getProfilingLevel()过时
getProfilingStatus()
getReplicationInfo()
getSiblingDB(数据库名)在与此服务器相同的服务器上获取数据库
hostInfo()获取有关服务器主机的详细信息
isMaster()检查副本主状态
killOp(opid)终止数据库中的当前操作
listCommands()列出所有db命令
loadServerScripts()加载db.system.js中的所有脚本
printCollectionStats()
printReplicationInfo()
printShardingStatus()
printSlaveReplicationInfo()
repairDatabase()
resetError()
runCommand(cmdObj)运行数据库命令。如果cmdObj是字符串,则将其转换为{cmdObj:1}
serverStatus()
setLogLevel(level,组件)
setProfilingLevel(level,slowms)0=off 1=slow 2=all
stats()状态
version()版本

集合命令

以下命令都以db.集合名.开头,通过db.集合名.help()获取

常用命令解释
help()帮助
insert(对象)插个
■■insertOne(对象,选项)插入一个
■■insertMany(对象数组,选项)插入多个
save(obj)插入
update(查询语句,对象[,upsert_bool,multi_bool] )更新
■■updateOne(拦截器,更新值,选项)更新一个
■■updateMany(拦截器,更新值,选项)更新多个
replaceOne(拦截器,替换值,选项)替换
■■deleteOne(拦截器,选项)删除一个
■■deleteMany(拦截器,选项)删除多个
remove(查询语句)删除
■■find(查询语句,字段)查询
■■findOne(语句,字段,选项,读策略)查询一个
findOneAndDelete(过滤器,选项)查询一个并删除
findOneAndReplace(过滤器,替换值,选项)查询一个并替换
findOneAndUpdate(过滤器,更新值,选项)查询一个并更新
bulkWrite(操作,选项)批量写入
copyTo(新集合名)复制集合,不复制索引
convertToCapped(maxBytes)
■■createIndex(键模式,选项)创建索引
■■createIndexes(键模式,选项)创建多个索引
ensureIndex(键模式,选项)已弃用,请使用createIndex
■■dropIndex(索引名)删除索引
■■dropIndexes()删除所有索引
reIndex()
getIndexes()获取所有索引
dataSize()
■■drop()删除这个集合
getDB()获取数据库
getPlanCache()获取与集合关联的查询计划缓存
■■distinct(键,查询语句,选项)去重
■■count(query={},选项)计数
■■group(分组)分组
mapReduce(mapFunction,reduceFunction,选项)
aggregate(pipeline,选项)聚合
renameCollection(新名称,dropTarget)重命名
runCommand(集合名,选项)
stats(选项)
storageSize()包括分配给此集合的可用空间
totalIndexSize()所有索引的大小
totalSize()所有数据和索引的大小
validate()
getShardVersion()仅用于分片
getShardDistribution()打印有关集群中数据分布的统计信息
latencyStats()显示此集合的操作延迟直方图

以下命令都以db.集合名.find().开头,通过db.集合名.find().help()获取

常用命令解释
help()帮助
■■limit(n)限制
■■skip(n)跳过
■■sort(…)排序
■■aggregate(…)聚合
■■count(…)计数
■■distinct(…)去重
■■find(…)查询
findAndModify(…)查询并更改
■■group(…)分组
remove(…)删除
update(…)更新
getCollection()
getVerbosity()
setVerbosity(verbosity)

插入操作

  • save():如果_id主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用db.collection.insertOne()或db.collection.replaceOne()来代替。
  • insert():若插入的数据主键已经存在,则会抛org.springframework.dao.DuplicateKeyException异常,提示主键重复,不保存当前数据。
  • insertOne():用于向集合插入一个新文档。
  • insertMany():用于向集合插入一个多个文档。

insertOne() 插入一个

db.a.insertOne({
    _id: 1,
    "字段名可以不带引号": "有中文或特殊符号需要用引号",
    objectId: ObjectId(),
    string: "字符串类型",
    boolean: true,
    int: NumberInt("123"),
    long: NumberLong("123"),
    double: 123.45,
    array: [1, 2, 3, 4, 5],
    object: {
        string: "字符串类型",
        boolean: true,
        int: NumberInt("123"),
        long: NumberLong("123"),
        double: 123.45
    },
    null: null,
    date: ISODate("2018-06-05T15:28:33.705+08:00")
})

向集合a中插入一条数据,指定_id1,不指定则自动生成ObjectId()
插入成功返回{“acknowledged”:true,“insertedId”:_id}
如果_id重复,会报错。

insertMany() 插入多个

db.a.insertMany([
    {
        string: "字符串类型",
        boolean: true,
        int: NumberInt("123"),
        long: NumberLong("123"),
        double: 123.45
    },
    {
        string: "字符串类型",
        boolean: true,
        int: NumberInt("124"),
        long: NumberLong("123"),
        double: 123.45
    },
    {
        string: "字符串类型",
        boolean: true,
        int: NumberInt("125"),
        long: NumberLong("123"),
        double: 123.45
    }
])

更新操作

updateOne() 更新一个

db.a.updateOne(
    {
        "int": NumberInt("123")
    },
    {
        $set: {
            "double": 111.11
        },
        $currentDate: {
            lastModified: true
        }
    }
)
  • 第一个括号内是匹配的条件,为int=123
  • 第二个括号是修改的内容
    • $set是修改字段的值,修改double=111.11
    • $currentDate是修改时间,指定字段lastModified
  • 如果有多个匹配的,则修改查询到的第一条数据

删除

deleteOne() 删除一个

db.a.deleteOne(
    {
        "int": NumberInt("123")
    }
)

查询操作

find() 查询

普通查询

查询int字段为124的所有记录,显示所有字段。

db.a.find(
    {
        int: 124
    }
)
AND条件查询

查询int为124,long为123的记录。

db.a.find(
    {
        int: 124,
        long: 123
    }
)
OR条件查询

查询boolean为true或(int为124,long为123)的记录。

db.a.find(
    {
        $or: [
            {
                int: 124,
                long: 123
            },
            {
                boolean: true
            }
        ]
    }
)

查询boolean为true或int为124或long为123的记录。

db.a.find(
    {
        $or: [
            {
                int: 124
            },
            {
                long: 123
            },
            {
                boolean: true
            }
        ]
    }
)
指定字段

只显示字段int和long,去除字段_id(不去除会默认显示)。

db.a.find(
    {
        int: 124
    },
    {
        _id: 0,
        int: 1,
        long: 1
    }
)
判断条件查询

查询int小于124的记录。

db.a.find(
    {
        int: {
            $lt: 124
        }
    }
)
判断条件
条件语句
={<key>:<value>}
<{<key>:{$lt:<value>}}
<={<key>:{$lte:<value>}}
>{<key>:{$gt:<value>}}
>={<key>:{$gte:<value>}}
!={<key>:{$ne:<value>}}
limit()与skip() 限制与跳过

跳过第一条,只显示2条。

db.a.find().limit(2).skip(1)
sort() 排序

先long降序,在int升序显示。

db.a.find().sort(
    {
        int: 1,
        long:  - 1
    }
)
aggregate() 聚合

以long字段分组,计算个数。

db.a.aggregate(
    [
        {
            $group: {
                _id: "$long",
                int: {
                    $sum: 1
                }
            }
        }
    ]
)

以long字段分组,计算int字段总和。

db.a.aggregate(
    [
        {
            $group: {
                _id: "$long",
                int: {
                    $sum: "$int"
                }
            }
        }
    ]
)
聚合表达式
常用表达式描述
■■$sum计算总和。
■■$avg计算平均值
■■$min获取集合中所有文档对应值得最小值。
■■$max获取集合中所有文档对应值得最大值。
$push将值加入一个数组中,不会判断是否有重复的值。
$addToSet将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。
$first根据资源文档的排序获取第一个文档数据。
$last根据资源文档的排序获取最后一个文档数据
聚合管道操作

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

常用表达式描述
■■$project修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
■■$match用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
■■$limit用来限制MongoDB聚合管道返回的文档数。
■■$skip在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
■■$group将集合中的文档分组,可用于统计结果。
■■$sort将输入文档排序后输出。
$geoNear输出接近某一地理位置的有序文档。

只显示int和long字段,不显示_id字段

db.a.aggregate(
    {
        $project: {
            _id: 0,
            int: 1,
            long: 1
        }
    }
)

先执行match,int字段在122和126之间,再执行group操作

db.a.aggregate(
    [
        {
            $match: {
                int: {
                    $gt: 122,
                    $lt: 126
                }
            }
        },
        {
            $group: {
                _id: "$long",
                int: {
                    $sum: 1
                }
            }
        }
    ]
)

跳过前1个文档

db.a.aggregate(
    {
        $skip: 1
    }
)

索引

createIndex() 创建索引

创建字段int升序索引

db.a.createIndex(
    {
        "int": 1
    }
)

创建字段int升序,long降序索引

db.a.createIndex(
    {
        int: 1,
        long:  - 1
    }
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值