Docs 菜单
Docs 主页
/ /
Atlas App Services
/

Global Modules

在此页面上

  • 公用事业
  • JSON Web 令牌 ( utils.jwt )
  • 密码学 ( utils.crypto )
  • JSON(JavaScript 对象表示法)
  • EJSON(扩展 JSON)
  • BSON(二进制 JSON)
  • BSON.ObjectId
  • BSON.BSONRegExp
  • BSON.Binary
  • BSON.MaxKey
  • BSON.MinKey
  • BSON.Int32
  • BSON.Long
  • BSON.Double
  • BSON.Decimal128

所有函数都可以访问支持常见数据转换、编码和处理工作的内置全局模块。 您可以通过每个模块特定的全局变量来访问函数源代码中的模块。

提示

另请参阅:

这些全局模块Node.js 内置模块不同。 有关受支持的 Node.js 模块的更多信息,包括如何导入这些模块,请参阅内置模块支持。

模块
说明
JSON Web 令牌
读取和写入 JSON Web 令牌的方法。
实现哈希和签名等加密算法的方法。
在string 扩展JSON 数据的 表示和对象表示之间进行转换的方法。
创建 二进制 JSON 的方法 对象并在各种 BSON 数据类型和编码之间进行转换。

您可以创建和读取 JSON Web 令牌utils.jwt 接口。

方法
说明
为给定的payloadsigningMethodsecret生成已编码的 JSON web token 字符串。
解码 JSON Web Token 字符串的payload
utils.jwt.encode()

根据指定的signingMethodsecretpayload生成已编码的 JSON web token 字符串。

utils.jwt.encode(
signingMethod: string,
payload: object,
secret: string,
customHeaderFields: object
): string
Parameter
类型
说明
signingMethod
字符串

对 JWT 进行编码时要使用的加密算法。Atlas App Services 支持以下 JWT 签名方法:

签名方法
说明
"HS256"
使用 SHA-256 的 HMAC
"HS384"
使用 SHA-384 的 HMAC
"HS512"
使用 SHA-512 的 HMAC
"RS256"
使用 SHA-256 的 RSASSA-PKCS1-v1_5
"RS384"
使用 SHA-384 的 RSASSA-PKCS1-v1_5
"RS512"
使用 SHA-512 的 RSASSA-PKCS1-v1_5
"ES256"
使用 P-256 和 SHA-256 的 ECDSA
"ES384"
使用 P-384 和 SHA-384 的 ECDSA
"ES512"
使用 P-512 和 SHA-512 的 ECDSA
"PS256"
使用 SHA-256 的 RSASSA-PSS 和使用 SHA-256 的 MGF1
"PS384"
使用 SHA-384 的 RSASSA-PSS 和使用 SHA-384 的 MGF1
"PS512"
使用 SHA-512 的 RSASSA-PSS 和采用 SHA-512 的 MGF1
payload
对象
一个 JSON 对象,用于指定令牌的声明和任何其他相关数据。
secret
字符串

App Services 用于对令牌进行签名的密钥字符串。字符串的值取决于您使用的签名方法:

签名方法
说明
"HS256"
"HS384"
"HS512"
随机字符串。
"RS256"
"RS384"
"RS512"
PKCS#8 格式的 RSA-SHA 私钥。
"PS256"
"PS384"
"PS512"
PKCS#8 格式的 RSA-PSS 私钥。
"ES256"
"ES384"
"ES512"
ECDSA PKCS#8 格式的私钥。
customHeaderFields
对象
一个JSON 对象,用于指定要包含在 JSON web token 的 JOSE 标头中的其他字段。
返回:针对提供的payload进行编码的 JSON Web Token 字符串。

例子

考虑以下 JSON web token 声明对象:

{
"sub": "1234567890",
"name": "Joe Example",
"iat": 1565721223187
}

我们可以通过调用utils.jwt.encode()将声明对象编码为 JSON web token 字符串。以下函数使用HS512签名方法和密钥"SuperSecret"对 JSON web token 进行编码:

exports = function() {
const signingMethod = "HS512";
const payload = {
"sub": "1234567890",
"name": "Joe Example",
"iat": 1565721223187
};
const secret = "SuperSecret";
return utils.jwt.encode(signingMethod, payload, secret);
}
"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBTY2htb2UiLCJpYXQiOjE1NjU3MjEyMjMxODd9.-QL15ldu2BYuJokNWT6YRiwZQIiIpvq6Kyv-C6qslNdNiUVxo8zqLJZ1iEkNf2yZKMIrQuMCtIC1tzd2H31AxA"
utils.jwt.decode()

对提供的 JSON Web 令牌字符串的payload进行解码。 key的值必须与用于对 JWT 字符串进行编码的密钥值相对应。

utils.jwt.decode(
jwtString: string,
key: string,
returnHeader: boolean
): object
Parameter
类型
说明
jwtString
字符串
一个 JSON web token字符串,用于对一组带有密钥值的已签名声明进行编码。
key
字符串

App Services 用于验证令牌签名的字符串。该字符串的值取决于您使用的签名方法:

签名方法
说明
"HS256"
"HS384"
"HS512"
用于对令牌进行签名的随机字符串。
"RS256"
"RS384"
"RS512"
与用于对令牌进行签名的私钥相对应的 RSA-PSS 公钥。
"PS256"
"PS384"
"PS512"
与用于对令牌进行签名的私钥相对应的 RSA-PSS 公钥。
"ES256"
"ES384"
"ES512"
ECDSA 与用于签署令牌的私钥相对应的公钥。
returnHeader
布尔
如果true ,则返回 JSON web token 的 JOSE 标头 除了解码的有效负载之外。
acceptedSigningMethods
string[]
可选。已接受的签名方法的数组。例如:["PS256", "HS256"]。 应包含此参数以防止已知的 JWT 安全漏洞
返回:如果returnHeaderfalse ,则返回解码后的 EJSON 有效负载。

如果returnHeadertrue ,则返回包含 JOSE 标头 的对象headerpayload 字段中,解码后的 EJSON 有效负载在 字段中。

{
"header": {
"<JOSE Header Field>": <JOSE Header Value>,
...
},
"payload": {
"<JWT Claim Field>": <JWT Claim Value>,
...
}
}

例子

考虑以下签名的 JSON web token 字符串:

"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSBTY2htb2UiLCJpYXQiOjE1NjU3MjEyMjMxODd9.-QL15ldu2BYuJokNWT6YRiwZQIiIpvq6Kyv-C6qslNdNiUVxo8zqLJZ1iEkNf2yZKMIrQuMCtIC1tzd2H31AxA"

该 JSON web token 是使用HS512签名方法并使用密钥值"SuperSecret"进行签名的。我们可以解码 JWT 的声明对象utils.jwt.decode() 。 以下函数将 JSON web token 字符串解码为 EJSON 对象:

exports = function(jwtString) {
const key = "SuperSecret";
return utils.jwt.decode(jwtString, key, false, ["HS512"]);
}
{
"sub": "1234567890",
"name": "Joe Example",
"iat": { "$numberDouble": 1565721223187 }
}

您可以通过utils.crypto接口使用加密算法对数据进行加密、解密、签名和验证。

方法
说明
使用特定的加密方法和密钥从给定的文本字符串生成加密的文本字符串。
使用特定的加密方法和密钥对提供的文本字符串进行解密。
使用私钥为给定的消息生成加密的唯一签名。
验证签名对于给定消息和公钥是否有效。
生成 HMAC 来自给定输入和密钥的签名。
为给定的输入和哈希函数生成哈希值。
utils.crypto.encrypt()

使用指定的加密方法和密钥,从提供的文本中生成加密文本字符串。

utils.crypto.encrypt(
encryptionType: string,
message: string,
key: string
): BSON.Binary
Parameter
类型
说明
encryptionType
字符串

用于加密消息的加密类型。支持以下加密类型:

  • AES 加密 ("aes" )

message
字符串
要加密的文本字符串。
key
字符串

用于加密文本的加密密钥。您应使用的密钥取决于加密方法:

加密类型
加密密钥
AES
16 字节、24 字节或 32 字节随机字符串
返回:一个BSON二进制对象,其中包含使用指定加密类型和密钥加密的文本string 。

例子

假设我们定义了一个名为aesEncryptionKey,其中包含以下 32 字节 AES 加密密钥:

"603082712271C525E087BD999A4E0738"

使用此 AES 密钥,我们可以使用以下函数将消息加密为 base64 字符串:

exports = function() {
const message = "MongoDB is great!"
const key = context.values.get("aesEncryptionKey");
const encryptedMessage = utils.crypto.encrypt("aes", message, key);
return encryptedMessage.toBase64();
}
"WPBuIvJ6Bity43Uh822dW8QlVYVJaFUiDeUjlTiJXzptUuTYIKPlXekBQAJb"
utils.crypto.decrypt()

使用指定的加密类型和密钥解密提供的文本字符串。如果加密类型和密钥与用于加密的类型和密钥相同,则返回原始的未加密文本。

utils.crypto.decrypt(
encryptionType: string,
encryptedMessage: BSON.Binary,
key: string
): BSON.Binary
Parameter
类型
说明
encryptionType
字符串

用于对提供的文本进行加密的加密类型。支持以下加密类型:

encryptedMessage
一个 BSON 二进制文件,用于对要解密的加密文本字符串进行编码。
key
字符串

用于解密文本的加密密钥。您应使用的密钥取决于加密类型:

加密类型
加密密钥
AES
16 字节、24 字节或 32 字节随机字符串
返回:包含解密消息的BSON 二进制对象。

如果提供的加密消息是使用指定的方法和密钥加密的,则解密的消息与原始消息相同。

例子

假设我们定义了一个名为aesEncryptionKey,其中包含以下 32 字节 AES 加密密钥:

"603082712271C525E087BD999A4E0738"

我们可以使用此 AES 密钥来解密任何使用相同密钥加密的 base64 字符串,方法是使用以下函数:

exports = function(encryptedMessage) {
// The encrypted message must be a BSON.Binary
if(typeof encryptedMessage === "string") {
encryptedMessage = BSON.Binary.fromBase64(encryptedMessage)
}
const key = context.values.get("aesEncryptionKey");
const decryptedMessage = utils.crypto.decrypt("aes", encryptedMessage, key);
return decryptedMessage.text();
}
"MongoDB is great!"
utils.crypto.sign()

使用私钥为消息生成唯一的加密签名。可以使用相应的公钥来验证签名,以确保签名者可以访问私钥,并且消息内容自签名以来没有更改。

utils.crypto.sign(
encryptionType: string,
message: string,
privateKey: string,
signatureScheme: string
): BSON.Binary
Parameter
类型
说明
encryptionType
字符串

用于生成私钥/公钥对的加密类型。支持以下加密类型:

message
字符串
要签名的文本字符串。
privateKey
字符串

使用指定加密类型生成的私钥。

重要

密钥格式

并非所有 RSA 密钥都使用相同的格式。 Atlas App Services只能使用符合标准 PKCS#1 的私钥对消息进行签名 格式。这种格式的私钥具有标头-----BEGIN RSA PRIVATE KEY-----

您可以使用以下 Shell 脚本生成有效的 RSA 私钥/公钥对并将每个密钥保存到其自己的文本文件中:

# Generate an RSA SSH key pair
# Save the key to a file called `rsa_key` when prompted
ssh-keygen -t rsa -m PEM -b 2048 -C "2048-bit RSA Key"
# Private Key
cat rsa_key > rsa.private.txt
# Public Key
ssh-keygen -f rsa_key.pub -e -m pem > rsa.public.txt
signatureScheme
字符串

可选。默认: "pss"

填充方案 签名应使用的 。Atlas App Services支持使用以下方案对消息进行签名:

返回:BSON.Binary 加密签名 使用指定私钥签名的消息。

例子

假设我们定义了一个名为rsaPrivateKey,其中包含以下 RSA 私钥:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDVsEjse2qO4v3p8RM/q8Rqzloc1lee34yoYuKZ2cemuUu8Jpc7
KFO1+aJpXdbSPZNhGLdANn8f2oMIZ1R9hgEJRn/Qm/YyC4RPTGg55nzHqSlziNZJ
JAyEUyU7kx5+Kb6ktgojhk8ocZRkorM8FEylkrKzgSrfay0PcWHPsKlmeQIDAQAB
AoGAHlVK1L7kLmpMbuP4voYMeLjYE9XdVEEZf2GiFwLSE3mkJY44033y/Bb2lgxr
DScOf675fFUAEK59ATlhxfu6s6rgx+g9qQQ+mL74YZWPqiZHBPjyMRaBalDVC4QF
YJ+DopFcB8hY2ElXnbK70ALmVYNjw3RdmC97h0YfOsQcWW0CQQD18aeuPNicVnse
Ku22vvhvQYlabaQh4xdkEIxz1TthZj48f61wZwEMipYqOAc5XEtDlNnxgeipv0yF
RHstUjwXAkEA3m0Br/U/vC9evuXppWbONana08KLgfELyd3Uw9jG7VKJZTBH5mS8
7CB68aEF8egrJpo8Ss8BkWrvCxYDb4Y77wJAUlbOMZozVtvpKidrIFR9Lho91uWA
Hsw9h4W20AzibXBig7SnJ0uE4WMAdS/+0yhgFkceVCmO8E2YW8Gaj4jJjwJASxtg
AHy+ItuUEL4uIW4Pn8tVW0BMP3qX0niXyfI/ag/+2S5uePv3V3y4RzNqgH83Yved
+FziWKpVQdcTHeuj/QJBAJl1G3WFruk0llIoKKbKljaEiCm1WCTcuEPbdOtkJYvO
9ZYQg/fji70FERkq2KHtY7aLhCHzy0d4n9xgE/pjV+I=
-----END RSA PRIVATE KEY-----

使用此 RSA 密钥,我们可以使用以下函数对消息进行签名:

exports = function() {
const message = "MongoDB is great!"
const rsaPrivateKey = context.values.get("rsaPrivateKey");
const signature = utils.crypto.sign("rsa", message, rsaPrivateKey, "pss");
return signature.toBase64();
}
"SpfXcJwPbypArt+XuYQyuZqU52YCAY/sZj2kiuin2b6/RzyM4Ek3n3spOtqZJqxn1tfQavxIX4V+prbs74/pOaQkCLekl9Hoa1xOzSKcGoRd8U+n1+UBY3d3cyODGMpyr8Tim2HZAeLPE/D3Q36/K+jpgjvrJFXsJoAy5/PV7iEGV1fkzogmZtXWDcUUBBTTNPY4qZTzjNhL4RAFOc7Mfci+ojE/lLsNaumUVU1/Eky4vasmyjqunm+ULCcRmgWtGDMGHaQV4OXC2LMUe9GOqd3Q9ghCe0Vlhn25oTh8cXoGpd1Fr8wolNa//9dUqSM+QYDpZJXGLShX/Oa8mPwJZKDKHtqrS+2vE6S4dDWR7zKDza+DeovOeCih71QyuSYMXSz+WWGgfLzv/syhmUXP/mjqgLmJU6Kwg5htajDoylpzLC0BLGT4zDZEwBrq/AjwRs/EPjYdFgGCt1WCbbVlDyXvvH1ekDrzACzumhiMSZNNa+ZH3JmMJxTCQWDfiTeAfkauaaZHKIj2q2/QE7vuAhNcVPJ2YgpXnvnQHJpEZBc/Y3Q6JLxom6+cGC4P//9d++r2cwzXIkqD+wSGZVSVtpm5CLtWMRSK5FX2dv16bM+LE8ozoRvtMUDTrQ8SSSDGxyuYbvN9b2fYYPcWpCMchqOBXV6eZGoMldaHX3Qy5h8="
utils.crypto.verify()

检查提供的签名是否对指定的消息和公钥有效。

如果签名有效,则可以保证签名者可以访问相应的私钥,并且消息内容自签名以来没有更改过。

utils.crypto.verify(
encryptionType: string,
message: string,
publicKey: string,
signature: BSON.Binary,
signatureScheme: string
): boolean
Parameter
类型
说明
encryptionType
字符串

用于生成私钥/公钥对的加密类型。支持以下加密类型:

message
字符串
要验证签名的文本字符串。如果签名有效,则这就是已签名的确切消息。
publicKey
字符串

要验证其签名的公钥。如果签名有效,则这是用于对消息进行签名的私钥的相应公钥。

重要

密钥格式

并非所有 RSA 密钥都使用相同的格式。 Atlas App Services只能使用符合标准 PKCS# 的1 RSA 密钥验证签名 格式。这种格式的公钥具有标头-----BEGIN RSA PUBLIC KEY-----

您可以使用以下 Shell 脚本生成有效的 RSA 私钥/公钥对并将每个密钥保存到其自己的文本文件中:

# Generate an RSA SSH key pair
# Save the key to a file called `rsa_key` when prompted
ssh-keygen -t rsa -m PEM -b 2048 -C "2048-bit RSA Key"
# Private Key
cat rsa_key > rsa.private.txt
# Public Key
ssh-keygen -f rsa_key.pub -e -m pem > rsa.public.txt
signature
要验证的签名。
signatureScheme
字符串

可选。默认: "pss"

填充方案 签名使用的。Atlas App Services支持验证使用以下方案的签名:

返回:一个布尔值,如果true ,则指示签名对于所提供的消息和公钥是否有效。

例子

我们收到一条带有BSON.Binary格式签名的消息,并希望验证该消息是否使用与发件人的 RSA 公钥相对应的私钥进行签名:

-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBANWwSOx7ao7i/enxEz+rxGrOWhzWV57fjKhi4pnZx6a5S7wmlzsoU7X5
omld1tI9k2EYt0A2fx/agwhnVH2GAQlGf9Cb9jILhE9MaDnmfMepKXOI1kkxDIRT
JTuTHn4pvqS2CiOGTyhxlGSiszwUTKWSsrOBKt9rLQ9xYc+wqWZ5AgMBAAE=
-----END RSA PUBLIC KEY-----

使用此 RSA 密钥,我们可以使用以下函数验证使用对应私钥进行签名的消息:

exports = function() {
const rsaPublicKey = context.values.get("rsaPublicKey");
const message = "MongoDB is great!"
const signature = BSON.Binary.fromBase64("SpfXcJwPbypArt+XuYQyuZqU52YCAY/sZj2kiuin2b6/RzyM4Ek3n3spOtqZJqxn1tfQavxIX4V+prbs74/pOaQkCLekl9Hoa1xOzSKcGoRd8U+n1+UBY3d3cyODGMpyr8Tim2HZAeLPE/D3Q36/K+jpgjvrJFXsJoAy5/PV7iEGV1fkzogmZtXWDcUUBBTTNPY4qZTzjNhL4RAFOc7Mfci+ojE/lLsNaumUVU1/Eky4vasmyjqunm+ULCcRmgWtGDMGHaQV4OXC2LMUe9GOqd3Q9ghCe0Vlhn25oTh8cXoGpd1Fr8wolNa//9dUqSM+QYDpZJXGLShX/Oa8mPwJZKDKHtqrS+2vE6S4dDWR7zKDza+DeovOeCih71QyuSYMXSz+WWGgfLzv/syhmUXP/mjqgLmJU6Kwg5htajDoylpzLC0BLGT4zDZEwBrq/AjwRs/EPjYdFgGCt1WCbbVlDyXvvH1ekDrzACzumhiMSZNNa+ZH3JmMJxTCQWDfiTeAfkauaaZHKIj2q2/QE7vuAhNcVPJ2YgpXnvnQHJpEZBc/Y3Q6JLxom6+cGC4P//9d++r2cwzXIkqD+wSGZVSVtpm5CLtWMRSK5FX2dv16bM+LE8ozoRvtMUDTrQ8SSSDGxyuYbvN9b2fYYPcWpCMchqOBXV6eZGoMldaHX3Qy5h8=")
const isValid = utils.crypto.verify("rsa", message, rsaPublicKey, signature, "pss");
return isValid; // true if the signature matches, else false
}
true
utils.crypto.hmac()

生成 HMAC 来自所提供的输入和密钥的签名。这在与需要签名请求的第三方 HTTP 服务通信时非常有用。

utils.crypto.hmac(
input: string,
secret: string,
hash_function: string,
output_format: string
): string
Parameter
类型
说明
input
字符串
要为其生成签名的输入。
secret
字符串
生成签名时使用的密钥。
hash_function
字符串
生成签名时使用的哈希函数的名称。 支持以下函数: "sha1""sha256""sha512"
output_format
字符串
生成的签名的格式。 可以是"hex" (表示十六进制字符串)或"base64" (表示 Base64 字符串)。
返回:输入的签名,采用output_format指定的格式。

例子

以下函数生成 sha256 签名作为 base 64 字符串:

exports = function() {
const signature = utils.crypto.hmac(
"hello!",
"super-secret",
"sha256",
"base64"
)
return signature
}
"SUXd6PRMaTXXgBGaGsIHzaDWgTSa6C3D44lRGrvRak0="
utils.crypto.hash()

使用指定的哈希函数为提供的输入生成哈希值。

utils.crypto.hash(
hash_function: string,
input: string | BSON.Binary
): BSON.Binary
Parameter
类型
说明
hash_function
字符串
哈希函数的名称。 支持以下函数: "sha1""sha256""md5"
input
字符串或 BSON.Binary
必需。要为其生成哈希值的输入。
返回:一个BSON.Binary对象,用于对由指定哈希函数生成的所提供输入的哈希值进行编码。

例子

以下函数使用 sha256 对输入字符串进行哈希处理:

exports = function() {
return utils.crypto.hash(
"sha256",
"hello!"
)
}
"zgYJL7lI2f+sfRo3bkBLJrdXW8wR7gWkYV/vT+w6MIs="

JSON全局模块提供 JSON 方法 序列化和反序列化标准 JavaScript 对象。

方法
说明
将序列化 JSON 字符串解析为 JavaScript 对象。
将 JavaScript 对象序列化为 JSON 字符串。
JSON.parse()

解析提供的 JSON 字符串并将其转换为 JavaScript 对象。

JSON.parse(jsonString: string): object
Parameter
类型
说明
jsonString
标准 JSON 对象的序列化字符串表示形式。
返回:根据提供的 JSON 字符串生成的标准 JavaScript 对象。

例子

以下函数将序列化的 JSON 字符串转换为等效的 JavaScript 对象:

exports = function() {
const jsonString = `{
"answer": 42,
"submittedAt": "2020-03-02T16:50:24.475Z"
}`;
return JSON.parse(jsonString);
}
{
"answer": 42,
"submittedAt": "2020-03-02T16:50:24.475Z"
}
JSON.stringify()

将提供的 JavaScript 对象序列化为 JSON 字符串。

JSON.stringify(json: object): string
Parameter
类型
说明
object
返回:所提供 JavaScript 对象的字符串表示形式。

例子

以下函数将 JavaScript 对象序列化为等效的 JSON 字符串:

exports = function() {
const jsonObject = {
answer: 42,
submittedAt: new Date("2020-03-02T16:46:47.977Z")
};
return JSON.stringify(jsonObject);
}
"{\"answer\":42,\"submittedAt\":\"2020-03-02T16:46:47.977Z\"}"

EJSON全局模块类似于JSON ,但保留了额外的扩展 JSON类型信息。

EJSON 是标准 JSON 的超集,增加了对 BSON 中可用但未包含在 JSON 规范 中的类型的额外支持 。

方法
说明
将序列化的扩展 JSON 字符串解析为 JavaScript 对象。
将 JavaScript 对象序列化为 ExtendedJSON 字符串。
EJSON.parse()

解析提供的EJSON string并将其转换为JavaScript对象。

EJSON.parse(ejsonString: string): object
Parameter
类型
说明
ejsonString
字符串
扩展 JSON 对象的序列化字符串表示形式。
返回:所提供 EJSON 字符串的 JavaScript 对象表示形式。

例子

以下函数将序列化的 EJSON 字符串转换为等效的 JavaScript 对象:

exports = function() {
const ejsonString = `{
"answer": {
"$numberLong": "42"
},
"submittedAt": {
"$date": {
"$numberLong": "1583167607977"
}
}
}`;
return EJSON.parse(ejsonString);
}
{
"answer": {
"$numberLong": "42"
},
"submittedAt": {
"$date": {
"$numberLong": "1583167607977"
}
}
}
EJSON.stringify()

将提供的JavaScript对象序列EJSON string 。

EJSON.stringify(json: object): string
Parameter
类型
说明
object
文档
一个EJSON对象。 该对象可以包含BSON types 。
返回:所提供 EJSON 对象的字符串表示形式。

例子

以下函数将 JavaScript 对象序列化为等效的 EJSON 字符串:

exports = function() {
const jsonObject = {
answer: 42,
submittedAt: new Date("2020-03-02T16:46:47.977Z")
};
return EJSON.stringify(jsonObject);
}
"{\"answer\":{\"$numberLong\":\"42\"},\"submittedAt\":{\"$date\":{\"$numberLong\":\"1583167607977\"}}}"

BSON全局模块允许您创建类型化 BSON 对象并在各种数据格式和编码之间进行转换。

BSON ,即二进制 JSON,是 MongoDB 数据库内部使用的数据格式。它使用标准 JSON 类型的超集对文档数据结构的二进制表示形式进行编码。 有关更多信息,请参阅 BSON 规范。

类型
说明
表示 ObjectId 值
表示正则表达式
表示二进制数据结构
表示比较值高于所有其他值的值
表示比较值低于所有其他值的值
表示 32 位带符号整数
表示 64 位带符号整数
表示 64 位浮点数
表示 128 位浮点数

BSON.ObjectId类型表示 12 字节的 MongoDB ObjectId标识符。

BSON.ObjectId()

构造一个对ObjectId进行编码的BSON.ObjectId对象

new BSON.ObjectId(id: string)
Parameter
类型
说明
id
字符串
可选。 12 字节字符串或 24 个十六进制字符的字符串。
返回:一个 BSON.ObjectId 对象,用于对指定的ObjectId string进行编码;如果未指定,则为生成的 ObjectId string进行编码。

例子

const objectId = new BSON.ObjectId("5e58667d902d38559c802b13");
const generatedObjectId = new BSON.ObjectId();

BSON.BSONRegExp类型表示 正则表达式 。您可以使用BSON.BSONRegExp对象和$regex查询运算符对 MongoDB 集合执行正则表达式查询

BSON.BSONRegExp()

从正则表达式字符串构造BSON.BSONRegExp对象。 您可以选择指定配置标志。

BSON.BSONRegExp(pattern: string, flags: string)
Parameter
类型
说明
pattern
字符串
正则表达式 模式。
flags
字符串
可选。 一个或多个 正则表达式标志。
返回:一个BSON.BSONRegExp对象,用于对所提供的正则表达式模式和标志进行编码。

例子

const regex = BSON.BSONRegExp("the great", "ig");

BSON.Binary类型表示二进制编码的数据字符串。

BSON.Binary.fromHex()

从表示为十六进制字符串的数据构造BSON.Binary对象。

BSON.Binary.fromHex(
hexString: string,
subType?: number
): BSON.Binary
Parameter
类型
说明
hexString
字符串
一个 字节对齐string 由十六进制字符组成的 (0 -9 和 AF)。
subType
整型
可选。 以十六进制string编码的数据类型。 该值必须在0 - 255范围内,其中默认值0表示通用二进制。 有关支持的子类型的完整列表,请参阅 BSON 规范。
返回:对所提供的十六进制字符串进行编码的BSON.Binary对象。

例子

const binary = BSON.Binary.fromHex("54657374206d65737361676520706c656173652069676e6f7265=");
BSON.Binary.prototype.toHex()

BSON.Binary对象转换为十六进制字符串。

BSON.Binary.prototype.toHex(): string
返回:所提供BSON.Binary对象的十六进制字符串表示形式。

例子

export = function() {
const binary = BSON.Binary.fromHex(
"54657374206d65737361676520706c656173652069676e6f7265="
);
const hexString = binary.toHex();
return hexString
}
"54657374206d65737361676520706c656173652069676e6f7265="
BSON.Binary.fromBase64()

从表示为 base64 字符串的数据构造BSON.Binary对象。

BSON.Binary.fromBase64(
base64String: string,
subType?: number
): BSON.Binary
Parameter
类型
说明
base64String
字符串

由 base64 编码的字符组成的字符串。

注意

字符串填充

base64 编码的字符串必须在字符串末尾包含一个或两个等号 ( = ),称为“填充”。 BSON.Binary.fromBase64()不支持未填充的字符串。

subType
整型
可选。 以十六进制string编码的数据类型。 该值必须在0 - 255范围内,其中默认值0表示通用二进制。 有关支持的子类型的完整列表,请参阅 BSON 规范。
返回:对所提供的 base64 字符串进行编码的BSON.Binary对象。

例子

const binary = BSON.Binary.fromBase64("VGVzdCBtZXNzYWdlIHBsZWFzZSBpZ25vcmU=");
BSON.Binary.prototype.toBase64()

BSON.Binary对象转换为 base64 字符串。

BSON.Binary.prototype.toBase64(): string
返回:BSON.Binary对象的 base64 字符串表示形式。

例子

const binary = BSON.Binary.fromBase64("VGVzdCBtZXNzYWdlIHBsZWFzZSBpZ25vcmU=");
const base64String = binary.toBase64();
BSON.Binary.prototype.text()

BSON.Binary对象转换为 UTF-8 字符串。

BSON.Binary.prototype.text(): string
返回:所提供BSON.Binary对象的 UTF-8 字符串表示形式。

例子

const binary = BSON.Binary.fromBase64("VGVzdCBtZXNzYWdlIHBsZWFzZSBpZ25vcmU=");
const decodedString = binary.text();

BSON.MaxKey类型表示比所有其他 BSON 值更高的比较值。

例子

await collection.findOne({ date: { $lt: BSON.MaxKey } });

BSON.MinKey类型表示比所有其他 BSON 值都低的值。

例子

await collection.findOne({ date: { $gt: BSON.MinKey } });

BSON.Int32类型表示 32 位带符号整数。

BSON.Int32()

使用 32 位数字构造BSON.Int32对象。

BSON.Int32(low32: number): BSON.Int32
Parameter
类型
说明
low32
数字
一个 32 位数字。
返回:对指定整数进行编码的BSON.Int32对象。 如果未提供任何参数,则返回0

例子

const int32 = BSON.Int32(42);

BSON.Long类型表示 64 位带符号整数。

BSON.Long(low32, high32)
BSON.Long(low32: number, high32: number): BSON.Long

从两个 32 位整数构造BSON.Long对象,这两个 32 位整数分别表示 64 位Long整数中的低 32 位和高 32 位。

Parameter
类型
说明
low32
整型
可选。长整数的低 32 位。这些位代表该数字的最低有效位数。
high32
整型
可选。长整数的高 32 位。这些位表示数字的最高有效位数。
返回:对指定整数进行编码的BSON.Long对象。 如果未提供任何参数,则返回0

BSON.Long 使用以下公式进行编码:

(high32 * (2**32)) + low32

例子

const long = BSON.Long(600206158, 342);

BSON.Double类型表示 64 位(8 字节)浮点数。

重要

使用 Decimal128 表示货币

BSON.Double 会出现浮点舍入误差,因此不建议在小数值必须精确舍入的使用案例中使用,例如 财务数据。 在这些情况下,请改用BSON.Decimal 128

BSON.Double(double)

使用 64 位十进制值构造BSON.Double对象。

BSON.Double(double: number): BSON.Double
Parameter
类型
说明
double
数字
64 位十进制值。
返回:一个BSON.Double对象,用于对指定的双精度进行编码。 如果未提供参数,则返回0

例子

const double = BSON.Double(1234.5678);

BSON.Decimal128类型表示 128 位(16 字节)浮点数。 此类型适用于小数值必须精确舍入的使用案例,例如 财务数据。

BSON.Decimal128.fromString(decimalString)

从十进制数的字符串表示构造BSON.Decimal128

BSON.Decimal128(decimalString: string): BSON.Decimal128
Parameter
类型
说明
decimalString
字符串
表示十进制数的字符串,例如 "1234.5678910123456"
返回:对所提供的十进制值进行编码的BSON.Decimal128

例子

const double = BSON.Decimal128.fromString("1234.5678910123456");

后退

上下文