如何处理 Azure CosmosDB & MongoDB 错误 2 BadRequest
How to handle Azure CosmosDB & MongoDB Error 2 BadRequest
我在 MongoDB 的 Azure CosmosDB 部署中遇到以下错误:
MongoError: Error=2, Details='Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327; Reason: (Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327; Reason: (Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327; Reason: (Message: {"Errors":["Encountered exception while executing function. Exception = Error: Invalid argument. Only JavaScript regex flags are supported (i, g, m, u)\r\nStack trace: Error: Invalid argument. Only JavaScript regex flags are supported (i, g, m, u)\n at regex_match (script.js:65:21)"]}
ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327, Request URI: /apps/787694ff-190a-4607-aa8d-54f0f1a41975/services/3ccd1c8a-f040-412f-8758-65417090d613/partitions/e1ee63ae-b6e1-4a16-b4e9-8cfb2054067a/replicas/132587547149035411s/, RequestStats: Please see CosmosDiagnostics, SDK: Windows/10.0.17763 cosmos-netstandard-sdk/3.3.2);););
at MessageStream.messageHandler (/var/www/SCWebMarketplace/server/node_modules/mongodb/lib/cmap/connection.js:268:20)
at MessageStream.emit (events.js:315:20)
at processIncomingData (/var/www/SCWebMarketplace/server/node_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (/var/www/SCWebMarketplace/server/node_modules/mongodb/lib/cmap/message_stream.js:42:5)
at writeOrBuffer (internal/streams/writable.js:358:12)
at MessageStream.Writable.write (internal/streams/writable.js:303:10)
at TLSSocket.ondata (internal/streams/readable.js:719:22)
at TLSSocket.emit (events.js:315:20)
at addChunk (internal/streams/readable.js:309:12)
at readableAddChunk (internal/streams/readable.js:284:9)
at TLSSocket.Readable.push (internal/streams/readable.js:223:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:188:23)
at TLSWrap.callbackTrampoline (internal/async_hooks.js:131:14) {
这不会发生在任何本地开发机器上,只会发生在 CosmosDB 上。
本次调用运行的代码如下:
const foundUsers = await User.find({
$and: [
{ isCreator: true },
{
$or: [
{
username: { $regex: text, $options: 'ix' },
},
{
firstName: { $regex: text, $options: 'ix' },
},
{
lastName: { $regex: text, $options: 'ix' },
},
],
},
],
}).populate('createdStories');
解决方案是从正则表达式查询中删除“x”字符。
const foundUsers = await User.find({
$and: [
{ isCreator: true },
{
$or: [
{
username: { $regex: text, $options: 'i' },
},
{
firstName: { $regex: text, $options: 'i' },
},
{
lastName: { $regex: text, $options: 'i' },
},
],
},
],
}).populate('createdStories');
我仍然不太清楚为什么 CosmosDB 有这个限制,但错误消息的相关部分是这样的:
Only JavaScript regex flags are supported (i, g, m, u)
我在 MongoDB 的 Azure CosmosDB 部署中遇到以下错误:
MongoError: Error=2, Details='Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327; Reason: (Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327; Reason: (Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327; Reason: (Message: {"Errors":["Encountered exception while executing function. Exception = Error: Invalid argument. Only JavaScript regex flags are supported (i, g, m, u)\r\nStack trace: Error: Invalid argument. Only JavaScript regex flags are supported (i, g, m, u)\n at regex_match (script.js:65:21)"]}
ActivityId: b83905b9-d5d4-41f2-adfb-80b760e04327, Request URI: /apps/787694ff-190a-4607-aa8d-54f0f1a41975/services/3ccd1c8a-f040-412f-8758-65417090d613/partitions/e1ee63ae-b6e1-4a16-b4e9-8cfb2054067a/replicas/132587547149035411s/, RequestStats: Please see CosmosDiagnostics, SDK: Windows/10.0.17763 cosmos-netstandard-sdk/3.3.2);););
at MessageStream.messageHandler (/var/www/SCWebMarketplace/server/node_modules/mongodb/lib/cmap/connection.js:268:20)
at MessageStream.emit (events.js:315:20)
at processIncomingData (/var/www/SCWebMarketplace/server/node_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (/var/www/SCWebMarketplace/server/node_modules/mongodb/lib/cmap/message_stream.js:42:5)
at writeOrBuffer (internal/streams/writable.js:358:12)
at MessageStream.Writable.write (internal/streams/writable.js:303:10)
at TLSSocket.ondata (internal/streams/readable.js:719:22)
at TLSSocket.emit (events.js:315:20)
at addChunk (internal/streams/readable.js:309:12)
at readableAddChunk (internal/streams/readable.js:284:9)
at TLSSocket.Readable.push (internal/streams/readable.js:223:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:188:23)
at TLSWrap.callbackTrampoline (internal/async_hooks.js:131:14) {
这不会发生在任何本地开发机器上,只会发生在 CosmosDB 上。
本次调用运行的代码如下:
const foundUsers = await User.find({
$and: [
{ isCreator: true },
{
$or: [
{
username: { $regex: text, $options: 'ix' },
},
{
firstName: { $regex: text, $options: 'ix' },
},
{
lastName: { $regex: text, $options: 'ix' },
},
],
},
],
}).populate('createdStories');
解决方案是从正则表达式查询中删除“x”字符。
const foundUsers = await User.find({
$and: [
{ isCreator: true },
{
$or: [
{
username: { $regex: text, $options: 'i' },
},
{
firstName: { $regex: text, $options: 'i' },
},
{
lastName: { $regex: text, $options: 'i' },
},
],
},
],
}).populate('createdStories');
我仍然不太清楚为什么 CosmosDB 有这个限制,但错误消息的相关部分是这样的:
Only JavaScript regex flags are supported (i, g, m, u)