本文更新于2022-01-22,使用mongoDB 4.4.5。 目录辅助扩展edithelpitshow collectionsshow databasesshow dbsshow tablesshow usersuseBulkWrit
本文更新于2022-01-22,使用mongoDB 4.4.5。
目录可于官网搜索相关文档:https://www.mongodb.com/search
说明:下文中,大写为自定义变量(个别大写的类型除外),根据实际情况填写。使用<>
引起表示内容可选,|
表示使用左侧或右侧内容,...
表示重复之前内容。
支持所有javascript内置的类型。
辅助扩展不可在脚本文件中使用。
编辑变量。使用EDITOR
变量或环境变量指定的编辑器编辑。
edit VAR_NAME
查看帮助。
help
对查询结果进行下一次遍历。对DBCollection.prototype.find
使用。
it
show collections
查看所有数据库。建议使用show dbs
。
show databases
查看所有数据库。
show dbs
查看当前数据库的所有集合。建议使用show collections
。
show tables
查看当前数据库的所有用户。
show users
切换数据库。
use DB_NAME
多个写入结果类型。包括以下字段:
当前数据库。为DB
类型。
数据库类型。
数据库指定的集合,等同于DATABASE[COLLECTION_NAME]
。为DBCollection
类型。
以管理员身份执行命令。可执行管理员命令,会在admin数据库上执行,会在$cmd集合上执行。大多数命令都有方法对其进行封装。
var OBJ = DATABASE.adminCommand(COMMAND_DOC);
COMMAND_DOC第一个字段为命令名。
返回包括以下字段:
刷新分片集群的路由配置元信息。
var OBJ = DATABASE.adminCommand({flushRouterConfig: 1});
获取参数。
var OBJ = DATABASE.adminCommand({getParameter: 1, PARAM: 1});
PARAM见setParameter
命令。
日志文件轮替。
var OBJ = DATABASE.adminCommand({logRotate: 1});
将主分片上的数据库迁移至其他分片。
var OBJ = DATABASE.adminCommand({movePrimary: DB_NAME, to: SHARD_NAME});
从分片集群中删除分片。
var OBJ = DATABASE.adminCommand({removeShard: SHARD_NAME});
返回包括以下字段:
删除分片可能需要很长时间,可执行多次来查看执行状态。
强制副本集备份节点进入/退出维护模式,不能在主节点上执行。
var OBJ = DATABASE.adminCommand({replSetMaintenance: BOOL});
设置参数。
var OBJ = DATABASE.adminCommand({setParameter: 1, PARAM: VALUE});
PARAM可为:
身份验证。
var RESULT = db.auth(USERNAME, PASSWord);
验证通过返回1,不通过返回0。
创建集合。
var OBJ = DATABASE.createCollection(COLLECTION_NAME <, COLLECTION_OPTION_DOC>);
COLLECTION_OPTION_DOC可使用以下字段:
_id
上创建索引。缺省为true。size
。在当前数据库添加用户。
db.createUser({
user: USER,
pwd: PASSWORD,
roles: [ROLE|{role: ROLE, db: DBNAME} <, ...>]
});
参数可使用以下字段:
ROLE可为:
无返回,会打印结果信息。
获取当前的所有操作。
var OBJ = DATABASE.currentOp();
QUERY_DOC见DBCollection.prototype.find
,为返回的inprog数组元素指定匹配条件。
返回包括以下字段:
^
。锁定所有数据库。禁止写入操作,都会被加入队列中等待,并进行同步,将所有脏页刷新至磁盘。
var OBJ = DATABASE.fsyncLock();
解锁所有数据库。
var OBJ = DATABASE.fsyncUnlock();
获取集合。类似DATABASE.COLLECTION_NAME
。
var DBCOLLECTION = DATABASE.getCollection(COLLECTION_NAME);
返回DBCollection
类型。
获取所有集合名。类似show collections
。
var NAME_ARR = DATABASE.getCollectionNames();
获取最后一次操作的错误等信息。
var OBJ = DATABASE.getLastError();
获取连接。
var MONGO = DATABASE.getMongo();
返回Mongo
类型。
获取数据库的系统分析器等级。
var LEVEL = DATABASE.getProfilingLevel();
获取同级数据库。类似use DB_NAME
。
var DATABASE2 = DATABASE.getSisterDB(DB_NAME);
返回DB
类型。
查看数据库的帮助。
DATABASE.help();
是否是副本集的主节点。
var OBJ = DATABASE.isMaster();
返回的字段包括:
终止操作。只有交出了锁的操作(如更新、查找、删除)才能被终止,正在占用锁或正在等待锁的操作无法被终止。
var OBJ = DATABASE.killOp(OPID);
当操作从DB.prototype.currentOp
的返回数组中消失后才真正被终止。
列出所有命令。
DATABASE.listCommands();
查看副本集的oplog信息。可在主节点和备份节点上执行。
DATABASE.printReplicationInfo();
无返回,会打印几行信息:
查看副本集备份节点的oplog信息。可在主节点和备份节点上执行。
DATABASE.printSlaveReplicationInfo();
无返回,会打印几个小节的备份节点信息,每个小节包括几行信息:
执行命令。不可执行管理员命令,会在$cmd集合上执行。大多数命令都有方法对其进行封装。
var OBJ = DATABASE.runCommand(COMMAND_DOC);
COMMAND_DOC第一个字段为命令名。
返回包括以下字段:
压缩集合。
var OBJ = DATABASE.runCommand({compact: COLLECTION_NAME});
返回包括以下字段:
会消耗大量资源。
查看分片集群的连接池状态。
var OBJ = DATABASE.runCommand({connPoolStats: 1});
只在分片集群的mongos和mongod上运行才有意义。
查看数据总大小。
var OBJ = DATABASE.runCommand({
dataSize: COLLECTION_NAMESPACE
<, keyPattern: {KEY: 1|-1 <, ...>}
<, min: {KEY: VALUE <, ...>}>
<, max: {KEY: VALUE <, ...>}>
>
});
COLLECTION_NAMESPACE即"DB_NAME.COLLECTION_NAME"。
返回包括以下字段:
需要扫描所有文档。
获取数据库的散列值。
var OBJ = DATABASE.runCommand({dbHash: 1});
查看启动服务器的命令行参数。
var OBJ = DATABASE.serverCmdLineOpts();
返回包括以下字段:
获取服务器状态。
var OBJ = DATABASE.serverStatus();
设置数据库的系统分析器等级。
var OBJ = DATABASE.setProfilingLevel(LEVEL <, SLOW_MS>);
LEVEL可为:0为关闭系统分析器,1为只记录慢查询,2为记录所有操作。
SLOW_MS为慢查询阈值,单位为毫秒。不要设置得过小,即使系统分析器关闭,慢查询也可能被记录下来。
返回包括以下字段:
此方法的设置会在服务器重启后被清除。
停止服务器。必需运行在admin数据库上。
var RETURN = DATABASE.shutdownServer(
OPTION可使用以下字段:
只当停止失败时,才有返回值,其为一个字符串。
查看数据库的状态。在一个繁忙的系统上列出数据库的状态会非常慢,而且会阻碍其他操作。
var OBJ = DATABASE.stats();
SCALE_FACTOR为比例因子(scale factor),返回文档的字段数值会先除以SCALE_FACTOR。默认为1,即以1字节为单位。
获取服务器版本。
var VERSION = DATABASE.version();
集合类型。
聚合。
var DOCS = DBCOLLECTION.aggregate(PIPELINE_DOC <, ...>);
PIPELINE_DOC可使用以下管道操作符:
$group:分组。$group: {_id: "$INPUT_KEY"|{KEY: "$INPUT_KEY" <, ...>} <, OTHER_KEY: EXPR_DOC <, ...>>}
。_id
指定分组键,也是输出文档的_id
值。"$INPUT_KEY"见DBCollection.prototype.find
。EXPR_DOC可以使用以下分组表达式,其EXPR可以直接指定值,可以使用"$INPUT_KEY"来指定键的值:
算数操作符:
$avg: EXPR
。$sum: EXPR
。极值操作符:
$first: EXPR
。$last: EXPR
。$max: EXPR
。$min: EXPR
。数组操作符:
$addToSet: EXPR
。数组中元素的顺序是不确定的。$push: EXPR
。$limit:限制。$limit: N
。结果集只取前N个文档。
$match:匹配。$match: QUERY_DOC
。QUERY_DOC见DBCollection.prototype.find
,但不可以使用地理空间操作符。
$project:投射。$project: PROJECTION_DOC
。PROJECTION_DOC见DBCollection.prototype.find
。
$skip:跳过。$skip: N
。跳过结果集的前N个文档。
$sort:排序。$sort: SORT_DOC
。SORT_DOC见DBQuery.prototype.sort
。
$unwind: 拆分。$unwind: "$ARRAY_KEY"
。根据数组键中的每一个值拆分为单独的文档。如果数组有N个元素,则拆分成N个文档,此键依次替换成各个数组元素,并包含原文档中的其他键。
返回的DOCS实现了forEach
方法。
将集合转换成固定集合。
var OBJ = DBCOLLECTION.convertToCapped({size: N_BYTES});
返回文档的数量。
var N = DBCOLLECTION.count();
QUERY_DOC见DBCollection.prototype.find
。当不指定QUERY_DOC时,即查询文档的总数,无论集合有多大,都可以很快返回。
创建索引。
var OBJ = DBCOLLECTION.createIndex(INDEX_DOC <, INDEX_OPTION_DOC>);
INDEX_DOC为{KEY: 1|-1|"hashed"|"text"|"2d"|"2dsphere" <, ...>}
。1为升序,-1为降序,hashed为散列索引,text为全文本索引,2d或2dsphere为地理空间索引。如指定多个键,则为按指定键顺序的复合索引。
2d索引需建立在值为[X, Y]
形式的字段上。
2dsphere索引需建立在值为GeoJSON的字段上。GeoJSON的语法如下:
{type: "Point", coordinates: [X, Y]}
。{type: "Line", coordinates: [[X1, Y1], [X2, Y2] <, ...>]}
。{type: "Polygon", coordinates: [[X1, Y1], [X2, Y2] <, ...>]}
。INDEX_OPTION_DOC中可使用以下字段:
english
。如插入的文档有language
字段,则分词语言会被其值覆盖。weights: {KEY|$**: WEIGHT <, ...>}
。$**
表示所有字符串字段,包括内嵌字段。权重范围为1至1000000000,默认为1。删除多个文档。
var OBJ = DBCOLLECTION.deleteMany(QUERY_DOC);
QUERY_DOC见DBCollection.prototype.find
。
返回包括以下字段:
删除单个文档。
var OBJ = DBCOLLECTION.deleteOne(QUERY_DOC);
QUERY_DOC见DBCollection.prototype.find
。
返回包括以下字段:
字段排重。如果字段是数组,则会使用数组元素进行排重。
var VALUE_ARR = DBCOLLECTION.distinct(KEY);
删除集合。
var BOOL = DBCOLLECTION.drop();
删除索引。
var OBJ = DBCOLLECTION.dropIndex(INDEX_NAME);
INDEX_NAME为DBCollection.prototype.getIndexes
返回的name字段的值。
查找文档。
var DBQUERY = DBCOLLECTION.find(>);
DBCOLLECTION.find(>);
QUERY_DOC为查找的匹配条件,各键值对的关系是与。可使用:
KEY:键的匹配条件。可以使用a.b的形式指定内嵌文档(可为数组)的字段;可以使用a.INDEX的形式通过下标指定数组元素。KEY: VALUE|CONDITION_DOC
。VALUE为null
还可匹配键不存在的情况;VALUE为子文档或数组则进行精确匹配,与字段的顺序和数量有关。CONDITION_DOC可使用以下操作符:
$all: [VALUE <, ...>]
。$elemMatch: CONDITION_DOC
。只匹配数组,存在元素与CONDITION_DOC匹配则数组匹配。CONDITION_DOC中的键为数组元素子文档的键。$eq: VALUE
。$exists: BOOL
。实际上,0和false表示false,其他值都表示true。注意,字段值为null
也为存在。$gt: VALUE
。$gte: VALUE
。$in: [VALUE <, ...>]
。返回文档的顺序与VALUE的顺序无关。$lt: VALUE
。$lte: VALUE
。$ne: VALUE
。$nin: [VALUE <, ...>]
。$not: CONDITION_DOC
。$mod: [DIVISOR, REMAINDER]
。$size: N
。也可以使用以下地理空间操作符(GEOJSON使用GeoJSON语法,见DBCollection.prototype.createIndex
):
$geoIntersects: {$geometry: GEOJSON}
。$near: {$geometry: GEOJSON}
。$near: [X, Y]
。$within: {$geometry: GEOJSON}
。$within: 2D_SHAPE
。2D_SHAPE可使用以下操作符表示形状:
$box: [[X1, Y1], [X2, Y2]]
。$center: [[X, Y], R]
。$polygon: [[X, Y] <, ...>]
。$and:与。$and: [CONDITION_DOC <, ...>]
。
$nor:都不。$nor: [CONDITION_DOC <, ...>]
。
$or:或。$or: [CONDITION_DOC <, ...>]
。
$text:使用全文本索引查询。$text: SEARCH_DOC
。SEARCH_DOC可使用以下操作符:
$search: SEARCH
。SEARCH以空格分隔成若干个搜索词,各搜素词是或的关系。如搜索词以""
引起表示必需匹配该词,如搜索词以-
开头表示排除该词。$where:执行任意查询。$where: FUNCTION
。FUNCTION中的this为当前遍历的文档,返回true表示匹配,否则表示不匹配。
PROJECTION_DOC为查找结果字段的投射方式。{KEY: VALUE, <, ...>}
。对于KEY,若QUERY_DOC使用a.b进行查询,则可以通过定位操作符$以a.$的形式指定已匹配的数组元素,但只能指定第一个匹配的数组元素。VALUE可为:
0:不投射该键。KEY: 0
。未指定的键都投射。如有一个非_id
键指定为0,则所有键不能再指定为非0数值。除非使用_id: 0
,否则_id
会被自动投射。
非0数值:投射该键。KEY: N
。未指定的键不投射。
$slice:投射数组的切片子集。KEY: {$slice: N|[OFFSET, COUNT]}
。N为正数则保留开头元素,为负数则保留末尾元素,0则为空数组。未指定的键都投射。
"$INPUT_KEY":使用文档指定键的值进行投射,类似键重命名。`KEY: "$INPUT_KEY",INPUT_KEY的形式与QUERY_DOC中KEY的形式一样。
表达式:KEY: EXPR_DOC
。EXPR_DOC可以使用以下表达式,其EXPR可以直接指定值,可以使用"$INPUT_KEY"来指定键的值,可以使用任意深度嵌套的表达式:
数学表达式,接收数值类型,返回数值类型:
$add: [EXPR <, ...>]
。$subtract: [EXPR1, EXPR2]
。返回EXPR1-EXPR2。$multiply: [EXPR <, ...>]
。:相除。$divide: [EXPR1, EXPR2]
。返回EXPR1/EXPR2。:取余。$mod: [EXPR1, EXPR2]
。返回EXPR1%EXPR2。日期表达式,接收日期类型,返回数值类型:
$dayOfMonth: EXPR
。$dayOfWeek: EXPR
。$dayOfYear: EXPR
。$hour: EXPR
。$minute: EXPR
。$month: EXPR
。$second: EXPR
。$week: EXPR
。$year: EXPR
。字符串表达式,接收字符串类型,返回字符串类型:
$concat: [EXPR <, ...>]
。$substr: [EXPR, START_OFFSET, LENGTH]
。从START_OFFSET字节(含)开始截取LENGTH字节$toLower: EXPR
。$toUpper: EXPR
。逻辑表达式,包括:
比较表达式:
$cmp: [EXPR1, EXPR2]
。若EXPR1$eq: [EXPR1, EXPR2]
。返回EXPR1==EXPR2。$gt: [EXPR1, EXPR2]
。返回EXPR1>EXPR2。$gte: [EXPR1, EXPR2]
。返回EXPR1>=EXPR2。$lt: [EXPR1, EXPR2]
。返回EXPR1$lte: [EXPR1, EXPR2]
。返回EXPR1<=EXPR2。$ne: [EXPR1, EXPR2]
。返回EXPR1!=EXPR2。$strcasecmp: [EXPR1, EXPR2]
。接收字符串类型,返回结果类似$cmp
。布尔表达式,接收布尔类型,返回布尔类型:
$and: [EXPR <, ...>]
。$not: EXPR
。$or: [EXPR <, ...>]
。控制语句:
$cond: [BOOL_EXPR, EXPR_WHILE_TRUE, EXPR_WHILE_FALE]
:若BOOL_EXPR为true
,则返回EXPR_WHILE_TRUE,否则返回EXPR_WHILE_FALE。$ifNull: [EXPR, REPLACEMENT_EXPR]
:若EXPR为null
,则返回REPLACEMENT_EXPR,否则返回EXPR。其他:投射该键为VALUE。KEY: VALUE
。
返回DBQuery
类型。如不接收返回,则默认打印前20个文档,若需继续遍历则使用辅助扩展it
。
查找并更新文档。只会更新一个文档。
var RESULT_DOC = DBCOLLECTION.findAndModify({
query: QUERY_DOC
<, sort: SORT_DOC>
<, remove: BOOL>
<, update: DOC|MODIFIER_DOC>
<, upsert: BOOL>
<, new: BOOL>
<, fields: PROJECTION_DOC>
});
DBCollection.prototype.find
。DBCollection.prototype.find
。remove
和update
必须使用其一。DBQuery.prototype.sort
。DBCollection.prototype.update
。remove
和update
必须使用其一。查找单个文档。
var DOC = DBCOLLECTION.findOne(>);
QUERY_DOC见DBCollection.prototype.find
。
PROJECTION_DOC见DBCollection.prototype.find
。
返回的文档经过格式化。如找不到,则返回null
。
查看集合的所有索引信息。
var ARR = DBCOLLECTION.getIndexes();
返回的数组元素包括以下字段:
DBCollection.prototype.createIndex
中创建索引的INDEX_DOC。DBCollection.prototype.createIndex
中INDEX_DOC生成的KEY_DIRECTION[_...]的形式。查看集合的帮助。
DBCOLLECTION.help();
插入文档。
var WRITERESULT = DBCOLLECTION.insert(DOC <, OPTION>);
var BULKWRITERESULT = DBCOLLECTION.insert([DOC <, ...>] <, OPTION>);
OPTION可使用以下字段:
writeConcern: WRITE_CONCERN_DOC
。WRITE_CONCERN_DOC可使用以下字段:
"majority"
为写入大多数节点,或为自定义复制保证规则名字(见rs.initiate
的GET_LAST_ERROR_MODES_NAME)。插入单个文档时,类似DBCollection.prototype.insertOne
,返回WriteResult
类型。
插入多个文档时,类似DBCollection.prototype.insertMany
,返回BulkWriteResult
类型。
插入多个文档。如其中某个文档插入失败,则之前的都插入成功,之后的都插入失败,且会抛出异常。
var OBJ = DBCOLLECTION.insertMany([DOC <, ...>]);
返回包括以下字段:
_id
值的数组。如DOC未指定则自动添加。插入单个文档。
var OBJ = DBCOLLECTION.insertOne(DOC);
返回包括以下字段:
_id
值。如DOC未指定则自动添加。执行MapReduce。
var RESULT = DBCOLLECTION.mapreduce(MAP, REDUCE, OUTPUT_COLLECTION_NAME|OPTION_DOC);
MAP是一个函数,this
表示当前正在处理的文档:
function () {
emit(KEY, VALUE);
}
REDUCE是一个函数,一定要能够在map阶段的结果或前一个reduce阶段的结果上反复执行,因此返回的文档必须能作为VALUE_ARR的一个元素:
function(KEY, VALUE_ARR) {
return VALUE;
}
OPTION_DOC可使用以下字段:
finalize:将reduce的结果进行最后处理。finalize: FINALIZE
。FINALIZE是一个函数:
function(KEY, VALUE) {
return FINALIZE_VALUE;
}
limit:执行map之前限制文档的最多数量(含)。1limit: N`。
out:结果集合名。out: OUTPUT_COLLECTION_NAME
。必需此字段。
query: 执行map之前的查找规则。query: QUERY_DOC
。QUERY_DOC见DBCollection.prototype.find
。
scope:变量作用域。scope: {PARAM_NAME: PARAM_VALUE <, ...>}
。其他函数可以直接使用PARAM_NAME来使用作用域中的变量。
sort:执行map之前的排序规则。sort: SORT_DOC
。SORT_DOC见DBQuery.prototype.sort
。
会先清空结果集,结果集合中的每个文档包括以下字段:
可以在MAP、REDUCE、FINALIZE中使用print
将信息输出至服务器日志。
删除文档。
var WRITERESULT = DBCOLLECTION.remove(QUERY_DOC <, BOOL_ONE>);
QUERY_DOC见DBCollection.prototype.find
。
返回WriteResult
类型。
重命名集合。无论集合有多大都在瞬间完成。
var OBJ = DBCOLLECTION.renameCollection(NEW_COLLECTION_NAME <, REMOVE_EXISTING>);
若集合NEW_COLLECTION_NAME已存在,REMOVE_EXISTING为true则先删除该集合;为false则返回失败。默认为false。
保存文档。如果DOC没有_id
或集合中无该_id
值的文档,则插入文档;否则更新该_id
值的文档。
var WRITERESULT = DBCOLLECTION.save(DOC);
返回WriteResult
类型。
查看集合的状态。
var OBJ = DBCOLLECTION.stats();
SCALE_FACTOR为比例因子(scale factor),返回文档的字段数值会先除以SCALE_FACTOR。默认为1,即以1字节为单位。
返回文档的字段如下:
Object.bsonsize
的总和。indexSizes
各值的总和。更新文档。
var WRITERESULT = DBCOLLECTION.update(QUERY_DOC, DOC <, BOOL_UPSERT <, BOOL_MANY>>);
var WRITERESULT = DBCOLLECTION.update(QUERY_DOC, MODIFIER_DOC <, BOOL_UPSERT <, BOOL_MANY>>);
不可更新_id
字段。
QUERY_DOC见DBCollection.prototype.find
。
可以将文档替换成DOC。
也可以在MODIFIER_DOC使用更新修改器修改部分字段。更新修改器可使用:
$inc: {KEY: NUMBER <, ...>}
。只能用于数值类型的键。$set: {KEY: VALUE <, ...>}
。$setOnInsert: {KEY: VALUE <, ...>}
。$unset: {KEY: 1 <, ...>}
。值是无关的。以及数组修改器:
$addToSet: {ARR_KEY: ELEMENT|EACH_DOC <, ...>}
。只能用于数组类型的键。EACH_DOC可使用以下子操作符:
$each: [ELEMENT <, ...>]
。$pop: {ARR_KEY: 1|-1}
。1为从开头弹出,-1为从结尾弹出。只能用于数组类型的键。$pull: {ARR_KEY: ELEMENT}
。$push: {ARR_KEY: ELEMENT|PUSH_EACH_DOC <, ...>}
。只能用于数组类型的键。PUSH_EACH_DOC可使用以下子操作符:
$each: [ELEMENT <, ...>]
。$slice: N
。正数则保留开头元素,负数则保留末尾元素,0则清空。需与$each
一起使用。$sort: {ELEMENT_KEY: 1|-1}
。ELEMENT_KEY为数组元素的键,1为升序,-1为降序。需与$each
一起使用。上述KEY等键可以使用a.b的形式指定内嵌文档(可为数组)的字段;可以使用a.INDEX的形式通过下标指定数组元素;若QUERY_DOC使用a.b进行查询,则可以通过定位操作符$以a.$的形式指定已匹配的数组元素,但只能更新第一个匹配的数组元素。
如BOOL_UPSERT为true(缺省为false),则执行upsert。即,查询条件QUERY_DOC匹配不到文档时,先使用QUERY_DOC创建文档,再使用DOC或MODIFIER_DOC修改文档,最后将文档插入。
如BOOL_MANY为true(缺省为false),则更新所有匹配查询条件QUERY_DOC的文档,否则只更新第一个文档。
返回WriteResult
类型。
更新多个文档。
var OBJ = DBCOLLECTION.updateMany(QUERY_DOC, MODIFIER_DOC);
QUERY_DOC见DBCollection.prototype.find
。
MODIFIER_DOC见DBCollection.prototype.update
。
返回包括以下字段:
更新单个文档。
var OBJ = DBCOLLECTION.updateOne(QUERY_DOC, MODIFIER_DOC);
QUERY_DOC见DBCollection.prototype.find
。
MODIFIER_DOC见DBCollection.prototype.update
。
返回包括以下字段:
检验集合数据是否有效,即是否没有损坏。
var OBJ = DBCOLLECTION.validate(<{full: true}>);
如指定了{full: true}
,则进行更完整的检验。
返回包括以下字段:
查询游标类型。
获取执行计划。
var OBJ = DBQUERY.explain();
返回包括以下字段:
遍历所有文档。
DBQUERY.forEach(DOC => {});
是否还有下一个文档。
var BOOL = DBQUERY.hasNext();
使用指定的索引。
var DBQUERY2 = DBQUERY.hint(HINT_DOC);
HINT_DOC为{KEY: 1|-1 <, ...>}
。1为升序,-1为降序。如指定多个键,则为按指定键顺序的复合索引。或为{$natural: 1|-1}
使用自然排序,进行全表扫描。
限制文档的最多数量(含)。
var DBQUERY2 = DBQUERY.limit(N);
指定索引的最小值(含)。必须与DBQuery.prototype.hint
一起使用。
var DBQUERY2 = DBQUERY.min({KEY: VALUE <, ...>});
指定索引的最大值(含)。必须与DBQuery.prototype.hint
一起使用。
var DBQUERY2 = DBQUERY.max({KEY: VALUE <, ...>});
返回下一个文档。
var DOC = DBQUERY.next();
返回的文档经过格式化。
以优美的格式显示。
var DBQUERY2 = DBQUERY.pretty()
跳过若干数量的文档。
var DBQUERY2 = DBQUERY.skip(N);
对文档进行排序。
var DBQUERY2 = DBQUERY.sort(SORT_DOC);
SORT_DOC可使用{KEY: 1|-1 <, ...>}
。1为升序,-1为降序。按照各KEY指定的次序逐个排序。或为{$natural: 1|-1}
使用自然排序。
遍历所有文档并以数组返回。
var ARR = DBQUERY.toArray();
edit
辅助扩展使用的编辑器路径。也可在环境变量中设置。
var EDITOR = "EDITOR_PATH";
创建UTC时间。
var DATE = new ISODate();
var DATE = new ISODate(STR);
STR最完整的格式为:2006-01-02T15:04:05.000Z。
返回Date
类型。
加载并执行脚本。
load(JS_FILENAME);
相对路径根据shell运行目录,且无法识别主目录“~”。
最大值。值为{ "$maxKey" : 1 }
。
最小值。值为{ "$minKey" : 1 }
。
连接类型。
创建连接。
var MONGO = new Mongo(HOST_PORT);
获取数据库。
var DATABASE = MONGO.getDB(DB_NAME);
返回DB
类型。
获取所有数据库信息。类似show dbs
。
var OBJ = MONGO.getDBs();
允许连接从备份节点读取数据。
MONGO.setSlaveOk()
默认不允许连接从备份节点读取数据,否则会出现“not master and slaveOk=false”的错误。
32位有符号整数类型。
var NUMBERINT = new NumberInt(N);
64位有符号整数类型。
var NUMBERLONG = new NumberLong(N);
对象类型。
额外添加以下接口:
获取对象的BSON字节大小。
var N = Object.bsonsize(DOC);
对象ID类型。由12字节组成,依次为:4字节秒级时间戳、3字节主机唯一标识符(通常是主机名的散列值)、2字节进程ID、3字节自增计数器。
var OBJECTID = new ObjectId();
var OBJECTID = new ObjectId(HEX_STR);
对象ID的16进制字符串。
返回对象ID的时间戳对应的时间。
var DATE = OBJECTID.getTimestamp();
打印输出。
print(>);
以JSON格式打印输出。
printjson(ARG);
shell提示。
var prompt = "STR";
var prompt = function() {return "STR";};
为字符串或返回字符串的函数。如为函数,建议处理异常。
执行外部命令行程序。
run(COMMAND <, ARG <, ...>>);
副本集类型。
创建副本集。并不会创建数据库文件和启动进程,也不会从备份节点中选举出主节点,需依次执行REPLSETTEST.startSet
和REPLSETTEST.initiate
。
var REPLSETTEST = new ReplSetTest(OPTION);
OPTION包括以下字段:
初始化副本集。会从备份节点中选举出主节点。类似rs.initiate
。
REPLSETTEST.initiate();
REPL_CONFIG见rs.initiate
。
启动副本集。会先删除原有数据库目录,再创建数据库目录和文件,启动所有副本集进程,同时会不断输出所有节点的日志。
var ARR = REPLSETTEST.startSet();
ARR的各个元素包含节点的地址。
各节点的数据库目录名为“副本集名-节点序号”的形式。
停止副本集。会停止所有副本集进程。
REPLSETTEST.stopSet();
副本集辅助函数。
为副本集添加节点。
var OBJ = rs.add(HOST_PORT|REPL_MEMBER);
REPL_MEMBER见rs.initiate
。
此节点的数据目录要么是空的,要么拥有一份其他节点的数据副本。
为副本集添加仲裁者。
var OBJ = rs.addArb(HOST_PORT);
查看副本集配置。可见隐藏节点。
var REPL_CONFIG = rs.config();
REPL_CONFIG见rs.initiate
。此外还包括以下字段:
冻结备份节点。只能在备份节点上执行。
var OBJ = rs.freeze();
SECONDS为持续时间。如大于0,则强制其在指定时间内始终为备份节点,不能被选举为主节点。如为0,则解除冻结。如不指定,默认为0。
查看副本集辅助函数的帮助。
rs.help();
初始化副本集。会从备份节点中选举出主节点。
var OBJ = rs.initiate();
REPL_CONFIG包括以下字段:
priority
必需为0。priority
必需为0。priority
必需为0。tags: {REPL_TAG_KEY: VALUE <, ...>}
。可选。getLastErrorModes: {GET_LAST_ERROR_MODES_NAME: {REPL_TAG_KEY: N} <, ...>}
。可选,表示保证复制至分类标签REPL_TAG_KEY中至少N个不同的分类,每个分类的至少一个节点中。如不使用REPL_CONFIG,则会自动生成单节点副本集的配置,配置中自动生成的members.host
字段可能并不适用。
如果创建一个全新的副本集,可以在任意一个节点上执行;如果副本集中已经有一个有数据的节点,则只能在此节点上执行;如果副本集中拥有数据的节点不止一个,则无法初始化副本集。
重新配置副本集。
var OBJ = rs.reconfig(REPL_CONFIG <, OPTION>);
REPL_CONFIG见rs.initiate
。不能修改members._id
。
OPTION可使用以下字段:
true
,执行成功后,rs.config
返回的version
字段会大幅增加。为副本集删除节点。
var OBJ = rs.remove(HOST_PORT);
以当前节点的角度查看副本集所有节点的当前状态。可见隐藏节点。
var OBJ = rs.status();
返回包括以下字段:
将主节点退位为备份节点。只能在主节点上执行。
var OBJ = rs.stepDown();
SECONDS为持续时间。如不指定,默认为60。
修改当前节点的同步源。只能在备份节点上执行。
var OBJ = rs.syncFrom(HOST_PORT);
如果指定一个并不比当前节点领先的节点作为同步源,会给出警告,但仍然被允许。
分片集群辅助函数。
将副本集或单机增加为分片。
var OBJ = sh.addShard(REPLSET|HOST_PORT);
REPLSET的格式为:REPLSET_NAME/HOST_PORT<,...,HOST_PORT>
。REPLSET_NAME会被用作分片名,不能和现有分片相同。如果副本集已有数据,会将其所有数据库添加进分片集群中,但不能和现有分片有同名的数据库。可指定任意个(并不需要所有)HOST_PORT,会自动检测副本集所有节点。
如使用HOST_PORT,分片名的格式为shardNNNN,NNNN为4位整数。
为分片添加标签。
var OBJ = sh.addShardTag(SHARD_NAME, SHARD_TAG);
单个分片可添加的标签数量没有限制。
为分片标签添加范围规则。
var OBJ = sh.addTagRange(COLLECTION_NAMESPACE, {SHARD_KEY: MIN <, ...>}, {SHARD_KEY: MAX <, ...>}, SHARD_TAG);
范围包含MIN,不包含MAX。并不会立即生效,其只是一个对于均衡器的指令。
对数据库启用分片。
var OBJ = sh.enableSharding(DB_NAME);
查看均衡器开启状态。
var BOOL = sh.getBalancerState();
查看分片集群辅助函数的帮助。
sh.help();
将包括指定片键值的块移动到指定分片。移动完成后才返回。
var OBJ = sh.moveChunk(COLLECTION_NAMESPACE, {SHARD_KEY: VALUE <, ...>}, SHARD_NAME);
除非遇到特殊情况,否则都应使用自动分片,而非手动分片。在均衡器开启时尤其要注意。
在指定片键值处拆分块。
var OBJ = sh.splitAt(COLLECTION_NAMESPACE, {SHARD_KEY: VALUE <, ...>});
删除分片标签。
var OBJ = sh.removeShardTag(SHARD_NAME, SHARD_TAG);
设置均衡器开启状态。
var OBJ = sh.setBalancerState(BOOL);
不能立即终止进行中的均衡过程。
对集合分片。
var OBJ = sh.shardCollection(COLLECTION_NAMESPACE, {SHARD_KEY: 1|"hashed" <, ...>});
如集合DB_NAME.COLLECTION_NAME已存在,则SHARD_KEY上必需有索引;否则,会自动在SHARD_KEY上创建索引。
如SHARD_KEY为hashed且集合不存在,会立即创建一些空块,并将这些块分发到分片集群中。如SHARD_KEY不为"hashed",则可能插入大量的文档后才进行分片。
查看分片集群的状态。
sh.status();
如指定true
则打印出详细信息,包括每个块的信息。
无返回,会打印几部分信息:
sharding version
shards:分片信息。每行一个文档,每个文档包括以下字段:
active mongoses
autosplit
balancer:
databases:数据库信息。可能有若干份数据库信息。
每份数据库信息以一个文档开始,文档包括以下字段:
_id:数据库名。
primary:主分片名。
partitioned:是否分片。
此后是若干个集合的分片信息,以集合名为起始行。
集合的分片信息几部分:
shard key:片键。
unique:是否唯一。
balancing:是否启用均衡器。
chunks:块信息。包括两部分:
第一部分是此集合使用的分片。每行一个,包括分片名、分片中使用的块数量。
第二部分是各个块信息。每行一个,包括“-->>”表示的块范围、所在的分片名、Timestamp(MAJOR, MINOR)
的块版本(MAJOR会在块被迁移至新的分片时改变,MINOR会在块被拆分时改变)、特大块还有“jumbo”。
tag:分片标签信息。每行一个,包括标签名,“-->>”表示的标签范围。
如mongod使用--noscripting
选项启动,则无法执行此方法。
分片集群类型。
创建分片集群。会先删除原有数据库目录,再创建数据库目录和文件,启动mongos进程、配置副本集若干mongod进程、若干分片副本集的若干mongod进程,同时会不断输出所有节点的日志。
var SHARDINGTEST = new ShardingTest(OPTION);
OPTION包括以下字段:
各配置副本集节点的目录名为“unknown_name-configRS-节点序号”的形式,各分片副本集节点的目录名为“unknown_name-rs分片序号-节点序号”的形式。
停止分片集群。会停止mongos进程、配置副本集所有mongod进程、所有分片副本集所有mongod进程。
SHARDINGTEST.stop();
启动新的并行shell并执行脚本。
var FUNC = startParallelShell(JS_CODE <, PORT>);
会打印脚本的执行结果。
时间戳类型。
创建时间戳。
var TIMESTAMP = new Timestamp();
SECONDS为从1970-01-01 00:00:00起的秒数。
COUNTER为自定义的计数器。
单个写入结果类型。包括以下字段:
_id
。--结束END--
本文标题: MongoDB学习笔记:JavaScript shell
本文链接: https://lsjlt.com/news/9101.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0