【发布时间】:2023-03-14 12:06:01
【问题描述】:
我正在尝试使用 PyMongo 对 MongoDB 服务器执行正则表达式查询。文档结构如下。
{
"_id" : ObjectId("6076d2598128b279dfd62b1d"),
"transactionId" : "Test_Operation_112",
"requestA" : {
"pState" : "{\"key1\":\"value1\",\"key2\":\"value2\"}",
"request" : "{\"header\":{\"sender\":{\"login\":\"XXXXXXXXXX\",\"password\":\"XXXXXXXXXX\"},\"notification\":{\"url\":\"https://example.com/pqr\"},\"transactionId\":\"Test_Operation_112\",\"timeStamp\":\"04/13/2021 12:30:25-07:00\"},\"order\":{\"action\":\"CANCEL\"}]}}}"
},
"requestTimeStamp" : "04/13/2021 12:30:25-07:00",
"responsesA" : {
"response" : "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><Response System='HGGH' xsi:noNamespaceSchemaLocation='Response.xsd' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><Header TransactionId='Test_Operation_112' TimeStamp='04/13/2021 12:30:25-07:00'><Sender Login='XXXXXXXXXX' Password='XXXXXXXXXX'/><Notification URL='https://example.com/pqr'/><TransactionCode MajorCode='0' Description='Success'><TransactionCodeList ErrorCode='0' ErrorMessageText='Service Removed'/></Response>"
},
"lastUpdatedTime" : ISODate("2021-04-14T11:30:33.605Z")
}
{
"_id" : ObjectId("6076d2598128b279dfd62b1d"),
"transactionId" : "XYZ123123_7_Test$a1b2c3",
"requestA" : {
"pState" : "{\"key1\":\"value1\",\"key2\":\"value2\"}",
"request" : "{\"header\":{\"sender\":{\"login\":\"XXXXXXXXXX\",\"password\":\"XXXXXXXXXX\"},\"notification\":{\"url\":\"https://example.com/pqr\"},\"transactionId\":\"XYZ123123_7_Test$a1b2c3\",\"timeStamp\":\"04/13/2021 12:30:25-07:00\"},\"order\":{\"action\":\"CANCEL\"}]}}}"
},
"requestTimeStamp" : "04/13/2021 12:30:30-07:00",
"responsesA" : {
"response" : "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><Response System='HGGH' xsi:noNamespaceSchemaLocation='Response.xsd' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><Header TransactionId='XYZ123123_7_Test$a1b2c3' TimeStamp='04/13/2021 12:30:25-07:00'><Sender Login='XXXXXXXXXX' Password='XXXXXXXXXX'/><Notification URL='https://example.com/pqr'/><TransactionCode MajorCode='0' Description='Success'><TransactionCodeList ErrorCode='0' ErrorMessageText='Service Removed'/></Response>"
},
"lastUpdatedTime" : ISODate("2021-04-14T11:30:33.605Z")
}
有不同类型的交易 ID。我想获取与事务 ID 模式匹配的所有记录。正则表达式模式是正确的。我尝试这样做
db.collectionName.find({"$and": [
{"requestTimeStamp": {"$gte": '04/13/2021 00:00:00-00:00', "$lte": '04/13/2021 23:59:59-00:00'}},
{"responsesA.response": {"$regex": "ErrorCode='0'"}},
{"requestA.request": {"$regex": "CANCEL"}},
{ "transactionId": { "$in": [/^Test_Operation_\d*/, /^XYZ\d*_\d_Test\$\S*/] } }]});
但我什么也没得到。我是否遗漏了什么,因为根据 MongoDB 文档,这应该是可能的?如果我在 Mongo 控制台中执行查询,它工作正常,这是否意味着 API 不支持它或者我只是使用不正确?
【问题讨论】:
-
requestTimeStamp- 这个字段的数据类型是什么? -
requestTimeStamp的类型为string。如果我删除下面的部分,那么查询也会在 python 中成功执行。{ "transactionId": { "$in": [/^Test_Operation_\d*/, /^XYZ\d*_\d_Test\$\S*/] } }