mongodb:常用命令
参考:
https://www.jb51.net/article/48217.htm (mongodb常用操作命令大全)
https://www.jianshu.com/p/fffb581bb1a9 (mongodb常用命令)
https://docs.mongodb.com/manual/reference/method/js-collection/ (综合:官方文档)
查看手册
help #直接运行,全局目录列表
...
db.help();
db.yourColl.help();
db.youColl.find().help();
...
db.getCollectionInfos()//查看集合元信息
数据库命令
创建数据库
1,使用use
可以直接创建数据库,不过直到插入数据时,使用 show dbs
才能看到库
2,MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
use test db.hello.insert({"name":"mongodb"})
删除数据库
参考:https://docs.mongodb.com/manual/reference/method/db.dropDatabase/(官方文档)
db.dropDatabase()//会删除当前数据库
表命令
参考:https://docs.mongodb.com/manual/reference/operator/query/jsonSchema/#json-schema(官方文档字段结构规划)
创建表
参考:https://docs.mongodb.com/manual/reference/method/db.createCollection/(官方文档)
//显式创建 db.createCollection( "contacts", { validator: { $jsonSchema: { //指定约束 bsonType: "object", required: [ "phone" ], properties: { phone: { bsonType: "string", description: "must be a string and is required" }, email: { bsonType : "string", pattern : "@mongodb\.com$", description: "must be a string and match the regular expression pattern" }, status: { enum: [ "Unknown", "Incomplete" ], description: "can only be one of the enum values" } } } } } ) //自动创建 db.contacts.insert({"name" : "菜鸟教程"})
删除表
参考:https://docs.mongodb.com/manual/reference/method/db.collection.drop/(官方文档)
db.user.drop() //成功返回true,失败返回false(比如删除不存在的表)
行命令
新增
//添加一个 db.products.insert( { item: "card", qty: 15 } ) db.products.insertOne( { item: "card", qty: 15 } )//传数组会失败 //批量添加 db.products.insert( [{ item: "card1", qty: 15 } ,{ item: "card2", qty: 15 } ]) db.products.insertMany( [{ item: "card1", qty: 15 } ,{ item: "card2", qty: 15 } ])//传json会失败
删除
//删除一条 db.orders.deleteOne( { "_id" : ObjectId("563237a41a4d68582c2509da") } ); //删除多条(只匹配一个就删除一条) db.orders.deleteMany( { "_id" : ObjectId("563237a41a4d68582c2509da") } ); //综合方法 db.collection.remove( <query>, { justOne: <boolean>,//默认false,也就是删多条 writeConcern: <document>, collation: <document>, let: <document> // Added in MongoDB 5.0 } )
修改
基本方法,参考:https://docs.mongodb.com/manual/reference/update-methods/
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string>, // Added in MongoDB 4.2
let: <document> // Added in MongoDB 5.0
}
)
db.collection.updateOne(<filter>, <update>, <options>)
db.collection.updateMany(<filter>, <update>, <options>)
db.collection.replaceOne(<filter>, <update>, <options>)
修改单元属性,参考:https://docs.mongodb.com/manual/reference/operator/update/
//普通字段
$inc,$mul
$min,$max
$set,$unset,$setOnInsert
$rename
//数组类型
$ //代表数组中的一个元素
$[],$[identifier] //代表数组每个元素
$push,$each,$position,$addToSet
$pop,$pull,$pullAll
$slice,$sort
查询
查询基本方法
db.collection.find() db.collection.findAndModify({ query: <document>, sort: <document>, remove: <boolean>, update: <document or aggregation pipeline>, // Changed in MongoDB 4.2 new: <boolean>, fields: <document>, upsert: <boolean>, bypassDocumentValidation: <boolean>, writeConcern: <document>, collation: <document>, arrayFilters: [ <filterdocument1>, ... ], let: <document> // Added in MongoDB 5.0 });//黑科技:支持删除,修改,是否未匹配新增,
查询单元属性,参考:https://docs.mongodb.com/manual/reference/operator/query/ (官方查询操作列表)
//基本比较 $eq,$ne,$in,$nin,$gt,$lt,$gte,$lte //单元逻辑 $and,$or,$not,$nor //$nor: !A或!B //字段 $type,$exists//类型,存在性(null也是存在) //数组 $all: [ "ssl" , "security" ] //数组类型的字段且需包含$all中所有的元素
$elemMatch: { <query1>, <query2>, ... } //至少包含一个
$size:<number> //数组中的元素个数为number //黑科技 $regex #正则表达式{ <field>: /pattern/<options> } $text #基于文本索引的文本搜索,必须先创建索引 $where #举例 {$where: <string|JavaScript Code>} $expr #表达式,可以组合任意单元,过于强大 //其他...
聚合(查询)
mongo的聚合查询比mysql的聚合查询强大太多,也包含基本查询的功能
参考:https://docs.mongodb.com/manual/reference/operator/aggregation(单元方法)
https://docs.mongodb.com/manual/reference/operator/aggregation-pipeline (全局方法)
举例:
db.scores.aggregate([ { $match: { score: { $gt: 80 } } }, { $count: "passing_scores" } ])
聚合全局方法
//基本语法: db.collection.aggregate( [ { <stage> }, ... ] ) //具体方法: $count #基数,可以设置返回字段名称 $match #匹配 $group #分组标识_id $set #可以设置已存在或不存在的字段
$unset #去掉设置的字段
$project #综合属性:可以包含$addFields和$unset的作用
$sort #排序
$skip #跳过
$limit #限制数量
聚合单元属性
#数学方法 $add:[ <expression1>, <expression2>] $subtract:[ <expression1>, <expression2>] $multiply:[ <expression1>, <expression2>, ... ] $divide:[ <expression1>, <expression2>] $mod[<expression1>, <expression2>] ... #字符串方法 $trim,$ltrim,$rtrim: { input: <string>, chars: <string>} $substr:[ <string>, <start>, <length> ] 截取 $split: [ <string expression>, <delimiter> ] 用分隔符分割为数组 $concat:[ <expression1>, <expression2>, ... ] $toUpper,$toLower:<expression> $toString:<expression> $replaceOne,$replaceAll: { input: <expression>, find: <expression>, replacement: <expression> } ... #数组方法 $arrayElemAt: [ <array>, <idx> ] $concatArrays: [ <array1>, <array2>, ... ] $first,$last:<expression> $in: [ <expression>, <array expression> ] $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] $map: { input: <expression>, as: <string>, in: <expression> } $filter: { input: <array>, as: <string>, cond: <expression> } $slice: [ <array>, <n> ]或者[ <array>, <position>, <n> ] ... #条件表达 $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> }或者[ <boolean-expression>, <true-case>, <false-case> ] $ifNull: [ <input-expression-1>, ... <input-expression-n>, <replacement-expression-if-null> ] //null值或不存在的会被设置为数组最后一个表达式的值 $switch: { branches: [ { case: <expression>, then: <expression> }, { case: <expression>, then: <expression> }, ... ], default: <expression> } //整个表达式作为一个值返回 #数据类型方法 $convert: { input: <expression>, to: <type expression>, onError: <expression>, // Optional. onNull: <expression> // Optional. } $type: <expression> //字段不存在时返回'missing' #基本聚合 $min: <expression> $max: <expression> $avg: <expression> $sum: <expression>字段数值数组,或者[ <expression1>, <expression2> ... ]每个字段为数值,不能混合 #其他:...
分页
sort({}).skip().limit()