文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MongoDB学习笔记:JavaScript shell

2021-02-08 03:23

关注

MongoDB学习笔记:JavaScript shell

本文更新于2022-01-22,使用MongoDB 4.4.5。

目录

可于官网搜索相关文档:https://www.mongodb.com/search

说明:下文中,大写为自定义变量(个别大写的类型除外),根据实际情况填写。使用<>引起表示内容可选,|表示使用左侧或右侧内容,...表示重复之前内容。

支持所有JavaScript内置的类型。

辅助扩展不可在脚本文件中使用。

edit

编辑变量。使用EDITOR变量或环境变量指定的编辑器编辑。

edit VAR_NAME

help

查看帮助。

help

it

对查询结果进行下一次遍历。对DBCollection.prototype.find使用。

it

show collections

查看当前数据库的所有集合。

show collections

show databases

查看所有数据库。建议使用show dbs

show databases

show dbs

查看所有数据库。

show dbs

show tables

查看当前数据库的所有集合。建议使用show collections

show tables

show users

查看当前数据库的所有用户。

show users

use

切换数据库。

use DB_NAME

多个写入结果类型。包括以下字段:

当前数据库。为DB类型。

数据库类型。

DATABASE.COLLECTION_NAME

数据库指定的集合,等同于DATABASE[COLLECTION_NAME]。为DBCollection类型。

DB.prototype.adminCommand

以管理员身份执行命令。可执行管理员命令,会在admin数据库上执行,会在$cmd集合上执行。大多数命令都有方法对其进行封装。

var OBJ = DATABASE.adminCommand(COMMAND_DOC);

COMMAND_DOC第一个字段为命令名。

返回包括以下字段:

flushRouterConfig

刷新分片集群的路由配置元信息。

var OBJ = DATABASE.adminCommand({flushRouterConfig: 1});

getParameter

获取参数。

var OBJ = DATABASE.adminCommand({getParameter: 1, PARAM: 1});

PARAM见setParameter命令。

logRotate

日志文件轮替。

var OBJ = DATABASE.adminCommand({logRotate: 1});

movePrimary

将主分片上的数据库迁移至其他分片。

var OBJ = DATABASE.adminCommand({movePrimary: DB_NAME, to: SHARD_NAME});

removeShard

从分片集群中删除分片。

var OBJ = DATABASE.adminCommand({removeShard: SHARD_NAME});

返回包括以下字段:

删除分片可能需要很长时间,可执行多次来查看执行状态。

replSetMaintenance

强制副本集备份节点进入/退出维护模式,不能在主节点上执行。

var OBJ = DATABASE.adminCommand({replSetMaintenance: BOOL});

setParameter

设置参数。

var OBJ = DATABASE.adminCommand({setParameter: 1, PARAM: VALUE});

PARAM可为:

DB.prototype.auth

身份验证。

var RESULT = db.auth(USERNAME, PASSWORD);

验证通过返回1,不通过返回0。

DB.prototype.createCollection

创建集合。

var OBJ = DATABASE.createCollection(COLLECTION_NAME <, COLLECTION_OPTION_DOC>);

COLLECTION_OPTION_DOC可使用以下字段:

DB.prototype.createUser

在当前数据库添加用户。

db.createUser({
	user: USER,
	pwd: PASSWORD,
	roles: [ROLE|{role: ROLE, db: DBNAME} <, ...>]
});

参数可使用以下字段:

ROLE可为:

无返回,会打印结果信息。

DB.prototype.currentOp

获取当前的所有操作。

var OBJ = DATABASE.currentOp();

QUERY_DOC见DBCollection.prototype.find,为返回的inprog数组元素指定匹配条件。

返回包括以下字段:

DB.prototype.fsyncLock

锁定所有数据库。禁止写入操作,都会被加入队列中等待,并进行同步,将所有脏页刷新至磁盘。

var OBJ = DATABASE.fsyncLock();

DB.prototype.fsyncUnlock

解锁所有数据库。

var OBJ = DATABASE.fsyncUnlock();

DB.prototype.getCollection

获取集合。类似DATABASE.COLLECTION_NAME

var DBCOLLECTION = DATABASE.getCollection(COLLECTION_NAME);

返回DBCollection类型。

DB.prototype.getCollectionNames

获取所有集合名。类似show collections

var NAME_ARR = DATABASE.getCollectionNames();

DB.prototype.getLastError

获取最后一次操作的错误等信息。

var OBJ = DATABASE.getLastError();

DB.prototype.getMongo

获取连接。

var MONGO = DATABASE.getMongo();

返回Mongo类型。

DB.prototype.getProfilingLevel

获取数据库的系统分析器等级。

var LEVEL = DATABASE.getProfilingLevel();

DB.prototype.getSisterDB

获取同级数据库。类似use DB_NAME

var DATABASE2 = DATABASE.getSisterDB(DB_NAME);

返回DB类型。

DB.prototype.help

查看数据库的帮助。

DATABASE.help();

DB.prototype.isMaster

是否是副本集的主节点。

var OBJ = DATABASE.isMaster();

返回的字段包括:

DB.prototype.killOp

终止操作。只有交出了锁的操作(如更新、查找、删除)才能被终止,正在占用锁或正在等待锁的操作无法被终止。

var OBJ = DATABASE.killOp(OPID);

当操作从DB.prototype.currentOp的返回数组中消失后才真正被终止。

DB.prototype.listCommands

列出所有命令。

DATABASE.listCommands();

DB.prototype.printReplicationInfo

查看副本集的oplog信息。可在主节点和备份节点上执行。

DATABASE.printReplicationInfo();

无返回,会打印几行信息:

DB.prototype.printSlaveReplicationInfo

查看副本集备份节点的oplog信息。可在主节点和备份节点上执行。

DATABASE.printSlaveReplicationInfo();

无返回,会打印几个小节的备份节点信息,每个小节包括几行信息:

DB.prototype.runCommand

执行命令。不可执行管理员命令,会在$cmd集合上执行。大多数命令都有方法对其进行封装。

var OBJ = DATABASE.runCommand(COMMAND_DOC);

COMMAND_DOC第一个字段为命令名。

返回包括以下字段:

compact

压缩集合。

var OBJ = DATABASE.runCommand({compact: COLLECTION_NAME});

返回包括以下字段:

会消耗大量资源。

connPoolStats

查看分片集群的连接池状态。

var OBJ = DATABASE.runCommand({connPoolStats: 1});

只在分片集群的mongos和mongod上运行才有意义。

dataSize

查看数据总大小。

var OBJ = DATABASE.runCommand({
	dataSize: COLLECTION_NAMESPACE
	<, keyPattern: {KEY: 1|-1 <, ...>}
	 <, min: {KEY: VALUE <, ...>}>
	 <, max: {KEY: VALUE <, ...>}>
	>
});

COLLECTION_NAMESPACE即"DB_NAME.COLLECTION_NAME"。

返回包括以下字段:

需要扫描所有文档。

dbHash

获取数据库的散列值。

var OBJ = DATABASE.runCommand({dbHash: 1});

DB.prototype.serverCmdLineOpts

查看启动服务器的命令行参数。

var OBJ = DATABASE.serverCmdLineOpts();

返回包括以下字段:

DB.prototype.serverStatus

获取服务器状态。

var OBJ = DATABASE.serverStatus();

DB.prototype.setProfilingLevel

设置数据库的系统分析器等级。

var OBJ = DATABASE.setProfilingLevel(LEVEL <, SLOW_MS>);

LEVEL可为:0为关闭系统分析器,1为只记录慢查询,2为记录所有操作。

SLOW_MS为慢查询阈值,单位为毫秒。不要设置得过小,即使系统分析器关闭,慢查询也可能被记录下来。

返回包括以下字段:

此方法的设置会在服务器重启后被清除。

DB.prototype.shutdownServer

停止服务器。必需运行在admin数据库上。

var RETURN = DATABASE.shutdownServer(

OPTION可使用以下字段:

只当停止失败时,才有返回值,其为一个字符串。

DB.prototype.stats

查看数据库的状态。在一个繁忙的系统上列出数据库的状态会非常慢,而且会阻碍其他操作。

var OBJ = DATABASE.stats();

SCALE_FACTOR为比例因子(scale factor),返回文档的字段数值会先除以SCALE_FACTOR。默认为1,即以1字节为单位。

DB.prototype.version

获取服务器版本。

var VERSION = DATABASE.version();

集合类型。

DBCollection.prototype.aggregate

聚合。

var DOCS = DBCOLLECTION.aggregate(PIPELINE_DOC <, ...>);

PIPELINE_DOC可使用以下管道操作符:

返回的DOCS实现了forEach方法。

DBCollection.prototype.convertToCapped

将集合转换成固定集合。

var OBJ = DBCOLLECTION.convertToCapped({size: N_BYTES});

DBCollection.prototype.count

返回文档的数量。

var N = DBCOLLECTION.count();

QUERY_DOC见DBCollection.prototype.find。当不指定QUERY_DOC时,即查询文档的总数,无论集合有多大,都可以很快返回。

DBCollection.prototype.createIndex

创建索引。

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的语法如下:

INDEX_OPTION_DOC中可使用以下字段:

DBCollection.prototype.deleteMany

删除多个文档。

var OBJ = DBCOLLECTION.deleteMany(QUERY_DOC);

QUERY_DOC见DBCollection.prototype.find

返回包括以下字段:

DBCollection.prototype.deleteOne

删除单个文档。

var OBJ = DBCOLLECTION.deleteOne(QUERY_DOC);

QUERY_DOC见DBCollection.prototype.find

返回包括以下字段:

DBCollection.prototype.distinct

字段排重。如果字段是数组,则会使用数组元素进行排重。

var VALUE_ARR = DBCOLLECTION.distinct(KEY);

DBCollection.prototype.drop

删除集合。

var BOOL = DBCOLLECTION.drop();

DBCollection.prototype.dropIndex

删除索引。

var OBJ = DBCOLLECTION.dropIndex(INDEX_NAME);

INDEX_NAME为DBCollection.prototype.getIndexes返回的name字段的值。

DBCollection.prototype.find

查找文档。

var DBQUERY = DBCOLLECTION.find(>);
DBCOLLECTION.find(>);

QUERY_DOC为查找的匹配条件,各键值对的关系是与。可使用:

PROJECTION_DOC为查找结果字段的投射方式。{KEY: VALUE, <, ...>}。对于KEY,若QUERY_DOC使用a.b进行查询,则可以通过定位操作符$以a.$的形式指定已匹配的数组元素,但只能指定第一个匹配的数组元素。VALUE可为:

返回DBQuery类型。如不接收返回,则默认打印前20个文档,若需继续遍历则使用辅助扩展it

DBCollection.prototype.findAndModify

查找并更新文档。只会更新一个文档。

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.findOne

查找单个文档。

var DOC = DBCOLLECTION.findOne(>);

QUERY_DOC见DBCollection.prototype.find

PROJECTION_DOC见DBCollection.prototype.find

返回的文档经过格式化。如找不到,则返回null

DBCollection.prototype.getIndexes

查看集合的所有索引信息。

var ARR = DBCOLLECTION.getIndexes();

返回的数组元素包括以下字段:

DBCollection.prototype.help

查看集合的帮助。

DBCOLLECTION.help();

DBCollection.prototype.insert

插入文档。

var WRITERESULT = DBCOLLECTION.insert(DOC <, OPTION>);
var BULKWRITERESULT = DBCOLLECTION.insert([DOC <, ...>] <, OPTION>);

OPTION可使用以下字段:

插入单个文档时,类似DBCollection.prototype.insertOne,返回WriteResult类型。

插入多个文档时,类似DBCollection.prototype.insertMany,返回BulkWriteResult类型。

DBCollection.prototype.insertMany

插入多个文档。如其中某个文档插入失败,则之前的都插入成功,之后的都插入失败,且会抛出异常。

var OBJ = DBCOLLECTION.insertMany([DOC <, ...>]);

返回包括以下字段:

DBCollection.prototype.insertOne

插入单个文档。

var OBJ = DBCOLLECTION.insertOne(DOC);

返回包括以下字段:

DBCollection.prototype.mapreduce

执行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可使用以下字段:

会先清空结果集,结果集合中的每个文档包括以下字段:

可以在MAP、REDUCE、FINALIZE中使用print将信息输出至服务器日志。

DBCollection.prototype.remove

删除文档。

var WRITERESULT = DBCOLLECTION.remove(QUERY_DOC <, BOOL_ONE>);

QUERY_DOC见DBCollection.prototype.find

返回WriteResult类型。

DBCollection.prototype.renameCollection

重命名集合。无论集合有多大都在瞬间完成。

var OBJ = DBCOLLECTION.renameCollection(NEW_COLLECTION_NAME <, REMOVE_EXISTING>);

若集合NEW_COLLECTION_NAME已存在,REMOVE_EXISTING为true则先删除该集合;为false则返回失败。默认为false。

DBCollection.prototype.save

保存文档。如果DOC没有_id或集合中无该_id值的文档,则插入文档;否则更新该_id值的文档。

var WRITERESULT = DBCOLLECTION.save(DOC);

返回WriteResult类型。

DBCollection.prototype.stats

查看集合的状态。

var OBJ = DBCOLLECTION.stats();

SCALE_FACTOR为比例因子(scale factor),返回文档的字段数值会先除以SCALE_FACTOR。默认为1,即以1字节为单位。

返回文档的字段如下:

DBCollection.prototype.update

更新文档。

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使用更新修改器修改部分字段。更新修改器可使用:

以及数组修改器:

上述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类型。

DBCollection.prototype.updateMany

更新多个文档。

var OBJ = DBCOLLECTION.updateMany(QUERY_DOC, MODIFIER_DOC);

QUERY_DOC见DBCollection.prototype.find

MODIFIER_DOC见DBCollection.prototype.update

返回包括以下字段:

DBCollection.prototype.updateOne

更新单个文档。

var OBJ = DBCOLLECTION.updateOne(QUERY_DOC, MODIFIER_DOC);

QUERY_DOC见DBCollection.prototype.find

MODIFIER_DOC见DBCollection.prototype.update

返回包括以下字段:

DBCollection.prototype.validate

检验集合数据是否有效,即是否没有损坏。

var OBJ = DBCOLLECTION.validate(<{full: true}>);

如指定了{full: true},则进行更完整的检验。

返回包括以下字段:

查询游标类型。

DBQuery.prototype.explain

获取执行计划。

var OBJ = DBQUERY.explain();

返回包括以下字段:

DBQuery.prototype.forEach

遍历所有文档。

DBQUERY.forEach(DOC => {});

DBQuery.prototype.hasNext

是否还有下一个文档。

var BOOL = DBQUERY.hasNext();

DBQuery.prototype.hint

使用指定的索引。

var DBQUERY2 = DBQUERY.hint(HINT_DOC);

HINT_DOC为{KEY: 1|-1 <, ...>}。1为升序,-1为降序。如指定多个键,则为按指定键顺序的复合索引。或为{$natural: 1|-1}使用自然排序,进行全表扫描。

DBQuery.prototype.limit

限制文档的最多数量(含)。

var DBQUERY2 = DBQUERY.limit(N);

DBQuery.prototype.min

指定索引的最小值(含)。必须与DBQuery.prototype.hint一起使用。

var DBQUERY2 = DBQUERY.min({KEY: VALUE <, ...>});

DBQuery.prototype.max

指定索引的最大值(含)。必须与DBQuery.prototype.hint一起使用。

var DBQUERY2 = DBQUERY.max({KEY: VALUE <, ...>});

DBQuery.prototype.next

返回下一个文档。

var DOC = DBQUERY.next();

返回的文档经过格式化。

DBQuery.prototype.pretty

以优美的格式显示。

var DBQUERY2 = DBQUERY.pretty()

DBQuery.prototype.skip

跳过若干数量的文档。

var DBQUERY2 = DBQUERY.skip(N);

DBQuery.prototype.sort

对文档进行排序。

var DBQUERY2 = DBQUERY.sort(SORT_DOC);

SORT_DOC可使用{KEY: 1|-1 <, ...>}。1为升序,-1为降序。按照各KEY指定的次序逐个排序。或为{$natural: 1|-1}使用自然排序。

DBQuery.prototype.toArray

遍历所有文档并以数组返回。

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 }

连接类型。

new Mongo

创建连接。

var MONGO = new Mongo(HOST_PORT);

Mongo.prototype.getDB

获取数据库。

var DATABASE = MONGO.getDB(DB_NAME);

返回DB类型。

Mongo.prototype.getDBs

获取所有数据库信息。类似show dbs

var OBJ = MONGO.getDBs();

Mongo.prototype.setSlaveOk

允许连接从备份节点读取数据。

MONGO.setSlaveOk()

默认不允许连接从备份节点读取数据,否则会出现“not master and slaveOk=false”的错误。

32位有符号整数类型。

var NUMBERINT = new NumberInt(N);

64位有符号整数类型。

var NUMBERLONG = new NumberLong(N);

对象类型。

额外添加以下接口:

Object.bsonsize

获取对象的BSON字节大小。

var N = Object.bsonsize(DOC);

对象ID类型。由12字节组成,依次为:4字节秒级时间戳、3字节主机唯一标识符(通常是主机名的散列值)、2字节进程ID、3字节自增计数器。

var OBJECTID = new ObjectId();
var OBJECTID = new ObjectId(HEX_STR);

OBJECTID.str

对象ID的16进制字符串。

ObjectId.prototype.getTimestamp

返回对象ID的时间戳对应的时间。

var DATE = OBJECTID.getTimestamp();

打印输出。

print(>);

以JSON格式打印输出。

printjson(ARG);

shell提示。

var prompt = "STR";
var prompt = function() {return "STR";};

为字符串或返回字符串的函数。如为函数,建议处理异常。

执行外部命令行程序。

run(COMMAND <, ARG <, ...>>);

副本集类型。

new ReplSetTest

创建副本集。并不会创建数据库文件和启动进程,也不会从备份节点中选举出主节点,需依次执行REPLSETTEST.startSetREPLSETTEST.initiate

var REPLSETTEST = new ReplSetTest(OPTION);

OPTION包括以下字段:

REPLSETTEST.initiate

初始化副本集。会从备份节点中选举出主节点。类似rs.initiate

REPLSETTEST.initiate();

REPL_CONFIG见rs.initiate

REPLSETTEST.startSet

启动副本集。会先删除原有数据库目录,再创建数据库目录和文件,启动所有副本集进程,同时会不断输出所有节点的日志。

var ARR = REPLSETTEST.startSet();

ARR的各个元素包含节点的地址。

各节点的数据库目录名为“副本集名-节点序号”的形式。

REPLSETTEST.stopSet

停止副本集。会停止所有副本集进程。

REPLSETTEST.stopSet();

副本集辅助函数。

rs.add

为副本集添加节点。

var OBJ = rs.add(HOST_PORT|REPL_MEMBER);

REPL_MEMBER见rs.initiate

此节点的数据目录要么是空的,要么拥有一份其他节点的数据副本。

rs.addArb

为副本集添加仲裁者。

var OBJ = rs.addArb(HOST_PORT);

rs.config

查看副本集配置。可见隐藏节点。

var REPL_CONFIG = rs.config();

REPL_CONFIG见rs.initiate。此外还包括以下字段:

rs.freeze

冻结备份节点。只能在备份节点上执行。

var OBJ = rs.freeze();

SECONDS为持续时间。如大于0,则强制其在指定时间内始终为备份节点,不能被选举为主节点。如为0,则解除冻结。如不指定,默认为0。

rs.help

查看副本集辅助函数的帮助。

rs.help();

rs.initiate

初始化副本集。会从备份节点中选举出主节点。

var OBJ = rs.initiate();

REPL_CONFIG包括以下字段:

如不使用REPL_CONFIG,则会自动生成单节点副本集的配置,配置中自动生成的members.host字段可能并不适用。

如果创建一个全新的副本集,可以在任意一个节点上执行;如果副本集中已经有一个有数据的节点,则只能在此节点上执行;如果副本集中拥有数据的节点不止一个,则无法初始化副本集。

rs.reconfig

重新配置副本集。

var OBJ = rs.reconfig(REPL_CONFIG <, OPTION>);

REPL_CONFIG见rs.initiate。不能修改members._id

OPTION可使用以下字段:

rs.remove

为副本集删除节点。

var OBJ = rs.remove(HOST_PORT);

rs.status

以当前节点的角度查看副本集所有节点的当前状态。可见隐藏节点。

var OBJ = rs.status();

返回包括以下字段:

rs.stepDown

将主节点退位为备份节点。只能在主节点上执行。

var OBJ = rs.stepDown();

SECONDS为持续时间。如不指定,默认为60。

rs.syncFrom

修改当前节点的同步源。只能在备份节点上执行。

var OBJ = rs.syncFrom(HOST_PORT);

如果指定一个并不比当前节点领先的节点作为同步源,会给出警告,但仍然被允许。

分片集群辅助函数。

sh.addShard

将副本集或单机增加为分片。

var OBJ = sh.addShard(REPLSET|HOST_PORT);

REPLSET的格式为:REPLSET_NAME/HOST_PORT<,...,HOST_PORT>。REPLSET_NAME会被用作分片名,不能和现有分片相同。如果副本集已有数据,会将其所有数据库添加进分片集群中,但不能和现有分片有同名的数据库。可指定任意个(并不需要所有)HOST_PORT,会自动检测副本集所有节点。

如使用HOST_PORT,分片名的格式为shardNNNN,NNNN为4位整数。

sh.addShardTag

为分片添加标签。

var OBJ = sh.addShardTag(SHARD_NAME, SHARD_TAG);

单个分片可添加的标签数量没有限制。

sh.addTagRange

为分片标签添加范围规则。

var OBJ = sh.addTagRange(COLLECTION_NAMESPACE, {SHARD_KEY: MIN <, ...>}, {SHARD_KEY: MAX <, ...>}, SHARD_TAG);

范围包含MIN,不包含MAX。并不会立即生效,其只是一个对于均衡器的指令。

sh.enableSharding

对数据库启用分片。

var OBJ = sh.enableSharding(DB_NAME);

sh.getBalancerState

查看均衡器开启状态。

var BOOL = sh.getBalancerState();

sh.help

查看分片集群辅助函数的帮助。

sh.help();

sh.moveChunk

将包括指定片键值的块移动到指定分片。移动完成后才返回。

var OBJ = sh.moveChunk(COLLECTION_NAMESPACE, {SHARD_KEY: VALUE <, ...>}, SHARD_NAME);

除非遇到特殊情况,否则都应使用自动分片,而非手动分片。在均衡器开启时尤其要注意。

sh.splitAt

在指定片键值处拆分块。

var OBJ = sh.splitAt(COLLECTION_NAMESPACE, {SHARD_KEY: VALUE <, ...>});

sh.removeShardTag

删除分片标签。

var OBJ = sh.removeShardTag(SHARD_NAME, SHARD_TAG);

sh.setBalancerState

设置均衡器开启状态。

var OBJ = sh.setBalancerState(BOOL);

不能立即终止进行中的均衡过程。

sh.shardCollection

对集合分片。

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

查看分片集群的状态。

sh.status();

如指定true则打印出详细信息,包括每个块的信息。

无返回,会打印几部分信息:

如mongod使用--noscripting选项启动,则无法执行此方法。

分片集群类型。

new ShardingTest

创建分片集群。会先删除原有数据库目录,再创建数据库目录和文件,启动mongos进程、配置副本集若干mongod进程、若干分片副本集的若干mongod进程,同时会不断输出所有节点的日志。

var SHARDINGTEST = new ShardingTest(OPTION);

OPTION包括以下字段:

各配置副本集节点的目录名为“unknown_name-configRS-节点序号”的形式,各分片副本集节点的目录名为“unknown_name-rs分片序号-节点序号”的形式。

SHARDINGTEST.stop

停止分片集群。会停止mongos进程、配置副本集所有mongod进程、所有分片副本集所有mongod进程。

SHARDINGTEST.stop();

启动新的并行shell并执行脚本。

var FUNC = startParallelShell(JS_CODE <, PORT>);

会打印脚本的执行结果。

时间戳类型。

new Timestamp

创建时间戳。

var TIMESTAMP = new Timestamp();

SECONDS为从1970-01-01 00:00:00起的秒数。

COUNTER为自定义的计数器。

单个写入结果类型。包括以下字段:

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯