MySQL Shell API8.0.31
MySQL产品的统一开发接口
方法|全体成员名单
收藏类参考

一个集合是一个容器,可以用来在MySQL数据库中存储文档。更多…

方法

CollectionAdd 添加(…)
创建文档添加处理程序。更多…
CollectionFind 找到(…)
创建可用于查找文档的处理程序。更多…
CollectionModify 修改(字符串searchCondition)
创建集合更新处理程序。更多…
CollectionRemove 删除(字符串searchCondition)
创建文档删除处理程序。更多…
结果 方法createIndex(字符串的名字, JSON索引定义)
在集合上创建索引。更多…
未定义的 dropIndex(字符串的名字
从集合中删除索引。
结果 replaceOne(字符串id,文档文档)
用新文档替换现有文档。更多…
结果 addOrReplaceOne(字符串id,文档文档)
替换或添加集合中的文档。更多…
文档 getOne(字符串id)
从集合中获取具有给定_id的文档。更多…
结果 removeOne(字符串id)
删除具有给定_id值的文档。更多…
整数 ()
返回集合中的文档数量。
-继承自DatabaseObject
字符串 getName()
返回此数据库对象的名称。

返回
此数据库对象的名称。

对象 getSession()
返回此数据库对象的Session对象。

返回
用于获取此对象的Session对象。
更多…
对象 getSchema()
返回此数据库对象的Schema对象。

返回
用于获取此对象的Schema对象。
更多…
保龄球 existsInDatabase()
验证此对象是否存在于数据库中。

返回
一个布尔值,指示对象是否仍然存在于数据库中。

附加继承成员

-继承的属性DatabaseObject
字符串 的名字
此数据库对象的名称。
对象 会话
此数据库对象的Session对象。
对象 模式
此数据库对象的Schema对象。

详细描述

一个集合是一个容器,可以用来在MySQL数据库中存储文档。

Document是一组键和值对,由JSON对象表示。

成员功能文档10bet官方网站

add ()

CollectionAdd添加 ...

创建文档添加处理程序。

完整的语法

集合 添加(…)
. execute ()

阀门(…)

过载
  • 添加(documentList)
  • 添加(文档[,文档,…])
  • add (mysqlx.expr(…))

此函数接收要添加到集合中的一个或多个文档定义。文档缓存在内部列表中,并在调用execute()方法时添加到集合中。

文档定义可以通过两种方式提供:

  • 使用包含文档字段的字典。
  • 使用JSON字符串作为文档表达式。

添加多个文档有三种方法:

  • 将几个参数传递给函数,每个参数都应该是一个文档定义。
  • 传递文档定义列表。
  • 在调用execute()之前多次调用此函数。

要添加,每个文档都必须有一个名为'_id'的字符串属性,最好有一个通用唯一标识符(UUID)作为值。如果'_id'属性缺失,它将自动设置为内部生成的UUID。

. execute ()

执行添加操作,将文档添加到目标集合。

另请参阅
CollectionAdd

例子

使用文档列表

使用现有文档列表添加文档

Var结果=集合。添加([{ "name": 'my sexth', "passed": 'again', "count": 5 }, mysqlx.expr('{"name": "my senevth", "passed": "yep again", "count": 5}')]).execute();
打印(“受影响的行混合列表:”,结果。affectedItemsCount,“\ n”);

多个参数

在单个调用中为每个文档使用单独的参数添加文档添加(…)

Var结果=集合。添加({"name": 'my eigth', "passed": 'yep', "count": 6 }, mysqlx.expr('{"name": "my nineth", "passed": "yep again", "count": 6}')).execute();
打印(“受影响的行多个参数:”,结果。affectedItemsCount,“\ n”);

链接添加

使用链式调用添加文档添加(…)

Var结果=集合。添加({的名字: 'my fourth', passed: 'again', count: 4 }).add({ name: 'my fifth', passed: 'once again', count: 5 }).execute();
打印("受影响的行链:",结果。affectedItemsCount,“\ n”);

JSON作为文档表达式

文档可以用JSON表达式表示,如下所示:

Var结果= collection.add(mysqlx。expr('{“名称”:“我的第五”、“通过”:“文件”、“数”:1}”)). execute ();
打印(“受影响的行单表达式:”,结果。affectedItemsCount,“\ n”);

find ()

CollectionFind找到 ...

创建可用于查找文档的处理程序。

完整的语法

集合 ([searchCondition])
[.fields(…))
[.groupBy(…)[具有(条件)]]
[.sort(…))
[.limit (numberOfDocs) [.offset(数量)]]
[.lockShared ([lockContention]) | .lockExclusive ([lockContention])]
< tr > < td > < / td > < td >(。绑定(名称、值))
.execute()

([searchCondition])

设置搜索条件,以标识要从所有者检索的文档集合.如果未指定搜索条件,将对集合中的所有文档执行查找操作。

查询条件支持参数绑定。

.fields(…)

过载
  • 字段(fieldList)
  • Fields (field[, field,…])
  • 字段(mysqlx.expr(…))

此函数设置要从匹配此查找操作的条件的每个文档检索的字段。

字段被定义为字符串值,其中包含定义要检索的字段的表达式。

可以使用下面的任何方法设置要检索的字段:

  • 将每个字段定义作为单独的字符串参数传递。
  • 传递包含字段定义的字符串列表。
  • 传递表示要生成的文档投影的JSON表达式。

.groupBy(…)

过载
  • groupBy (fieldList)
  • groupBy(field[, field,…])为结果集设置分组条件。

具有(条件)

为在聚合函数操作中要考虑的记录设置条件。

.sort(…)

过载
  • 排序(sortCriteriaList)
  • sort(sortCriterion[, sortCriterion,…])

如果使用,则CollectionFind操作将返回按已定义标准排序的记录。

每个定义的排序标准都遵循以下格式:

名称[ASC | DESC]

如果没有指定排序顺序,则默认使用ASC。

.limit (numberOfDocs)

如果使用,操作最多返回numberOfDocs文档。

.offset(数量)

如果使用,第一个数量记录将不包括在结果中。

.lockShared ([lockContention])

当调用此函数时,所选文档将被锁定以进行写操作,它们可以在不同的会话上检索,但不允许更新。

当当前事务被提交或回滚时,所获得的锁将被释放。

如果另一个会话包含对匹配文档的排他锁,lockcompete参数定义操作的行为。

lockcompete可以使用以下常量指定:

  • mysqlx.LockContention.DEFAULT
  • mysqlx.LockContention.NOWAIT
  • mysqlx.LockContention.SKIP_LOCKED

lockcompete也可以使用以下字符串文字指定(不区分大小写):

  • “默认”
  • “NOWAIT”
  • “SKIP_LOCKED”

如果没有指定lockcompete或指定默认值,则如果另一个会话已经对匹配文档持有排他锁,则操作将阻塞,直到该锁被释放为止。

如果lock争用设置为NOWAIT,而另一个会话已经对匹配文档持有排他锁,则操作不会阻塞,并将生成错误。

如果lockcompete被设置为SKIP_LOCKED,并且另一个会话已经对匹配的文档持有排他锁,那么操作将不会阻塞,只返回那些没有排他锁的文档。

此操作仅在事务中有意义。

.lockExclusive ([lockContention])

当调用此函数时,选中的文档将被锁定以进行读操作,它们将不能被其他会话检索。

当当前事务被提交或回滚时,所获得的锁将被释放。

如果另一个会话包含对匹配文档的锁,lockcompete参数定义操作的行为。

lockcompete可以使用以下常量指定:

  • mysqlx.LockContention.DEFAULT
  • mysqlx.LockContention.NOWAIT
  • mysqlx.LockContention.SKIP_LOCKED

lockcompete也可以使用以下字符串文字指定(不区分大小写):

  • “默认”
  • “NOWAIT”
  • “SKIP_LOCKED”

如果没有指定lockcompete或default,则如果另一个会话已经对匹配文档持有锁,则操作将阻塞。

如果lock争用设置为NOWAIT,而另一个会话已经持有匹配文档上的锁,则操作不会阻塞,并将生成错误。

如果lockcompete被设置为SKIP_LOCKED,而另一个会话已经持有匹配文档上的锁,则操作不会阻塞,只返回那些没有锁的文档。

此操作仅在事务中有意义。

.bind(名称、值)

将给定值绑定到具有指定名称的占位符。

如果名称所指示的占位符不存在,则会引发错误。

对于每个使用的占位符必须调用此函数一次,否则在调用execute()方法时将引发错误。

. execute ()

使用所有配置的选项执行find操作。

另请参阅
CollectionFind

例子

检索所有文档

var records = collection.find().execute().fetchAll();
打印(“:”,记录。长度,“\ n”);

过滤

Var记录=收集。找到('gender = "male"').execute().fetchAll();
打印(“男性:“记录。长度,“\ n”);
Var记录=收集。找到('gender = "female"').execute().fetchAll();
打印(“女性:“记录。长度,“\ n”);

字段选择

使用字段选择列表

Var结果=集合。找到('name = "jack"').fields(['ucase(name) as FirstName', 'age as Age']).execute();
var记录= result.fetchOne();
打印(“姓名:”,记录。FirstName, ' \ n ');
打印(年龄:,记录。年龄,' \ n ');

使用单独的字段选择参数

Var结果=集合。找到('name = "jack"').fields('ucase(name) as FirstName', 'age as Age').execute();
var记录= result.fetchOne();
打印(“姓名:”,记录。FirstName, ' \ n ');
打印(年龄:,记录。年龄,' \ n ');

使用投影表达式

Var结果=集合。找到('name = "jack"').fields(mysqlx.expr('{"FirstName":ucase(name), "InThreeYears":age + 3}')).execute();
var记录= result.fetchOne();
打印(“姓名:”,记录。FirstName, ' \ n ');
打印('在三年内:',记录。InThreeYears ' \ n ');

排序

var records = collection.find().sort('name').execute().fetchAll();
For (index = 0;索引< 7;指数+ +){
print(找到Asc,指数,“:”,记录(指数). name, ' \ n ');
Var records = collection.find()。排序(['名字desc ']) . execute () .fetchAll ();
For (index = 0;索引< 7;指数+ +){
print(找到Desc,指数,“:”,记录(指数). name, ' \ n ');

使用限制和偏移量

var records = collection.find().limit(4).execute().fetchAll();
print('Limit-Offset 0:',记录。长度,' \ n ');
For (index = 1;索引< 8;指数+ +){
var records = collection.find().limit(4).offset(index).execute().fetchAll();
print('Limit-Offset', index, ':',记录。长度,' \ n ');

参数绑定

Var记录=收集。找到('age = :years and gender = :heorshe').bind('years', 13).bind('heorshe', 'female').execute().fetchAll();
print('查找绑定长度:',记录。长度,' \ n ');
print('查找绑定名称:',记录[0].name, '\n');

修改()

CollectionModify修改 字符串 searchCondition

创建集合更新处理程序。

完整的语法

集合 .modify (searchCondition)
(。集(属性,值))
[.unset(…))
[.patch(文档)]
(。一个rrayInsert(docPath, value)]
(。一个rrayAppend(docPath, value)]
< tr > < td > < / td > < td > [.sort(…))< / td > < / tr > < tr > < td > < / td > < td > [.limit (numberOfDocs)] < / td > < / tr > < tr > < td > < / td > < td >(。绑定(名称、值)]< / td > < / tr > < tr > < td > < / td > < td > . execute () < / td > < / tr >

.modify (searchCondition)

参数
searchCondition 用于标识要更新的文档的表达式。

创建一个处理程序来更新集合中的文档。

此函数必须提供一个条件,所有符合条件的文档将被更新。

要更新所有文档,请设置一个总是求值为true的条件,例如'1'。

这里(属性,值)

向修改处理程序中添加一个操作,以设置选择筛选器和限制中包含的文档的属性。

  • 如果该属性不存在于文档中,则将用给定的值添加它。
  • 如果该属性已经存在于文档中,则将用给定的值更新它。

为值使用表达式

除非使用表达式,否则接收的值将以文本的方式设置到文档中。

当使用表达式时,将在服务器上求值,并将结果值设置到文档中。

要定义一个表达式使用:

mysqlx.expr(表达)

这个表达也可以用于参数绑定

一旦execute方法被调用,属性的添加将在集合的文档上完成。

.unset(…)

过载
  • 设置(attributeList)
  • 取消设置(属性[,属性,…])

从集合中的文档中删除属性。

一旦execute()方法被调用,属性删除将在集合的文档上执行。

.patch(文档)

根据补丁JSON对象对文档执行修改。

这个函数添加了一个更新集合文档的操作,该补丁操作遵循JSON Merge patch RFC7386中描述的算法。

类调用中指定的筛选器所匹配的字段将使用补丁JSON对象从集合中的文档中添加、更新或删除字段修改()函数。

要执行的操作取决于在补丁JSON对象中定义的属性:

  • 任何值等于null的属性如果存在将被删除。
  • 任何值不等于null的属性都将被更新。
  • 如果不存在,则添加值不为null的任何属性。

特别注意事项:

  • 文档的_id是不可变的,因此它不会受到补丁操作的影响,即使它包含在补丁JSON对象中。
  • 补丁JSON对象接受表达式对象作为值。如果使用,将在服务器端对它们进行评估。

一旦execute()方法被调用,补丁操作将在集合的文档上执行。

.arrayInsert (docPath值)

向修改处理程序中添加一个操作,以将值插入到选择筛选器和限制中包含的文档的数组属性中。

一旦execute()方法被调用,值的插入将在集合的文档上完成。

.arrayAppend (docPath值)

将一个操作添加到修改处理程序中,以将值附加到选择筛选器和限制中包含的文档的数组属性中。

.sort(…)

过载
  • 排序(sortCriteriaList)
  • sort(sortCriterion[, sortCriterion,…])

每个定义的排序标准都遵循以下格式:

名称[ASC | DESC]

如果没有指定排序顺序,则默认使用ASC。

此方法通常与limit结合使用,以固定要更新的文档数量。

.limit (numberOfDocs)

此方法通常与sort方法结合使用,以固定要更新的文档数量。

.bind(名称、值)

将给定值绑定到具有指定名称的占位符。

如果名称所指示的占位符不存在,则会引发错误。

对于每个使用的占位符必须调用此函数一次,否则在调用execute()方法时将引发错误。

. execute ()

使用配置的筛选器和限制执行添加到处理程序中的更新操作。

另请参阅
CollectionModify

例子

修改多个属性

Var结果=集合。修改('name = "brian"').set('alias', 'bri').set('last_name', 'black').set('age', mysqlx.expr('13+1')).execute();
打印('设置受影响的行:',结果。affectedItemsCount ' \ n ');

使用数组值修改属性

Var结果=集合。修改('name = "brian"').set('hobbies', mysqlx.expr(':list')).bind('list', ['soccer', 'dance', 'read']).execute();
打印('设置受影响的行:',结果。affectedItemsCount ' \ n ');

取消属性设置

Var结果=集合。修改('name = "brian"').unset('last_name').execute();
打印('未设置受影响的行:',结果。affectedItemsCount ' \ n ');

使用数组取消设置多个属性

Var结果=集合。修改('name = "brian"').unset(['alias', 'age']).execute();
打印('未设置受影响的行:',结果。affectedItemsCount ' \ n ');

修补多个属性

Var结果=集合。修改('name = "brian"').patch({'last_name': 'white', 'age': 14, 'alias': 'bw', 'girlfriends': ['lois', 'jane'] }).execute();
打印('受补丁影响的行:',结果。affectedItemsCount ' \ n ');

附加到数组属性

Var结果=集合。修改('name = "brian"').arrayAppend('girlfriends', 'cloe').execute();
打印('数组附加受影响的行:',结果。affectedItemsCount ' \ n ');

插入到数组属性中

Var结果=集合。修改('name = "brian"').arrayInsert('girlfriends[1]', 'samantha').execute();
打印('数组插入受影响的行:',结果。affectedItemsCount ' \ n ');

分类并设置一个限制

Var结果=集合。修改('age = 15')。集(“样本”,“in_limit”).sort(['名字']).limit (2) . execute ();
打印('受影响的行:',结果。affectedItemsCount ' \ n ');

remove ()

CollectionRemove删除 字符串 searchCondition

创建文档删除处理程序。

完整的语法

集合 .remove (searchCondition)
[.sort(…))
[.limit (numberOfDocs))
(。绑定(名称、值))
. execute ()

.remove (searchCondition)

为删除集合上的文档创建处理程序。

此函数必须提供一个条件,所有符合条件的文档将从集合中删除。

要删除所有文档,请设置一个总是计算值为true的条件,例如'1'。

searchCondition支持参数绑定。

.sort(…)

过载
  • 排序(sortCriteriaList)
  • sort(sortCriterion[, sortCriterion,…])

每个定义的排序标准都遵循以下格式:

名称[ASC | DESC]

如果没有指定排序顺序,则默认使用ASC。

此方法通常与limit结合使用,以固定要删除的文档数量。

.limit (numberOfDocs)

设置要删除的文档的限制。

此方法通常与sort方法结合使用,以固定要删除的文档数量。

.bind(名称、值)

将给定值绑定到具有指定名称的占位符。

如果名称所指示的占位符不存在,则会引发错误。

对于每个使用的占位符必须调用此函数一次,否则在调用execute()方法时将引发错误。

. execute ()

使用配置的筛选器和限制执行文档删除。

另请参阅
CollectionRemove

例子

在情况下拆卸

Var结果=集合。删除('age = 15').execute();
打印('受影响的行:',结果。affectedItemsCount ' \ n ');
var docs = collection.find().execute().fetchAll();
print('Records Left:', docs. txt)长度,' \ n ');

用绑扎去掉

Var结果=集合。删除('gender = :heorshe').limit(2).bind('heorshe', 'male').execute();
打印('受影响的行:',结果。affectedItemsCount ' \ n ');
var docs = collection.find().execute().fetchAll();
print('Records Left:', docs. txt)长度,' \ n ');

全部删除

Var结果= collection.remove('1').execute();
打印('受影响的行:',结果。affectedItemsCount ' \ n ');
var docs = collection.find().execute().fetchAll();
print('Records Left:', docs. txt)长度,' \ n ');

方法createIndex ()

结果方法createIndex 字符串 的名字
JSON indexDefinition

在集合上创建索引。

参数
的名字 要创建的索引的名称。
indexDefinition 带有索引信息的JSON文档。
返回
一个结果对象。

该函数将使用indexDefinition中提供的信息在集合上创建索引。

indexDefinition是一个JSON文档,包含以下信息:

{
字段:[,…],
类型:< Type >
  • index_field对象的Fields数组,每个对象描述要包含在索引中的单个文档成员。
  • 类型字符串,(可选)索引的类型。INDEX或SPATIAL中的一种。默认值是INDEX,可以省略。

单个index_field描述由以下字段组成:

{
字段:<字段>,
类型:<类型>,
要求:<布尔>,
选项:
Srid:
数组:<布尔>
  • 字段:字符串,要索引的文档成员或字段的完整文档路径。
  • type: string,是将字段映射到的受支持的SQL列类型之一。对于数字类型,后面可以跟着可选的UNSIGNED关键字。对于TEXT类型,可以添加用于索引的长度。
  • Required: bool,如果要求该字段在文档中存在,则为true(可选)。默认为false,除了GEOJSON,它默认为true。
  • options: uint,(可选)解码GEOJSON数据时使用的特殊选项标志。
  • srid: uint,(可选)解码GEOJSON数据时使用的srid值。
  • Array: bool,如果字段是数组(可选)为true。

只有当'type'设置为'GEOJSON'时,'options'和'srid'字段才能且必须出现。

只有当'type'是BINARY(N), CHAR(N), DATE, DATETIME, TIME, DECIMAL(M[,D]), SIGNED [INTEGER]或UNSIGNED [INTEGER]中的任何一个时,'array'字段才会出现。

replaceOne ()

结果replaceOne 字符串 id
文档 医生

用新文档替换现有文档。

参数
id 要替换的文档的标识符。
医生 新文件。
返回
一个结果对象,该对象包含受影响的行数。

替换用给定id标识的文档。如果没有找到与给定id匹配的文档,则返回结果将表示0个受影响的项目。

此操作只会影响一个文档。

文档的id保持不变,如果新文档包含不同的id,它将被忽略。

在集合上定义的任何约束(唯一键)都适用:

如果新文档包含一个已经为集合中除被替换的文档外的任何文档定义的惟一键,则操作将失败。

addOrReplaceOne ()

结果addOrReplaceOne 字符串 id
文档 医生

替换或添加集合中的文档。

参数
id 要替换的文档的标识符。
医生 新文件。
返回
一个结果对象,该对象包含受影响的行数。

替换用给定id标识的文档。如果没有找到与给定id匹配的文档,则将指定的文档添加到集合中。

此操作只会影响一个文档。

文档的id保持不变,如果新文档包含不同的id,它将被忽略。

在集合上定义的任何约束(唯一键)都适用于替换和添加操作:

  • 如果新文档包含一个已经为集合中除被替换的文档外的任何文档定义的惟一键,则替换操作将失败。
  • 如果新文档包含已经为集合中的任何文档定义的惟一键,则添加操作将失败。

getOne ()

文档getOne 字符串 id

从集合中获取具有给定_id的文档。

参数
id 要检索文档的标识符。
返回
匹配给定id的Document对象,如果没有找到匹配的则为NULL。

removeOne ()

结果removeOne 字符串 id

删除具有给定_id值的文档。

参数
id 要删除的文档的id。
返回
一个结果对象,该对象包含受影响的行数。

如果没有找到与给定id匹配的文档,则结果对象将指示0作为受影响的行数。