我有一个沙发库数据库,里面充满了如下所示的记录:
{
"_class": "com.discussoftware.server.shared.model.bo.licenseBo",
"customerId": "A1A2",
"term": "SUBSCRIPTION",
"keys": {
"abc-123-evaluation": {
"active": true,
"expirationDate": 1669680000000,
"key": "abc-123-evaluation",
"name": "base product, floating, subscription",
"notBefore": 1667088000000,
"options": [
{
"option": "base",
"quantity": 1
},
{
"option": "secondary",
"quantity": 1
},
{
"option": "teriary",
"quantity": 1
},
{
"option": "ops",
"quantity": 1
}
],
"units": 1,
"version":
{
"major": 1,
"minor": 1,
"patch": 0
}
}
},
"master": "def-456",
"productId": "a1a2a3a4",
"supportId": "A1A2A3"
}
我可以根据许可证密钥进行选择,声明如下:
SELECT *
FROM server1` AS d
WHERE ANY v in OBJECT_VALUES(d.keys)
SATISFIES v.expirationDate < 1713744000000
AND v.expirationDate > 1701734400000
AND v.version.major == 1
AND v.version.minor == 1
AND v.version.patch == 0
END;
但是我在编写更新来更新版本值时遇到了麻烦。
我认为在 60 次左右的尝试中,我尝试过的最好的一次是:
UPDATE `server1` AS d
SET v.version = {"major": 2, "minor": 1, "batch": = 0}
WHERE ANY v in OBJECT_VALUES(d.keys)
SATISFIES v.expirationDate < 1713744000000
AND v.expirationDate > 1701734400000
AND v.version.major == 2024
AND v.version.minor == 0
AND v.version.patch == 1
END;
我能想到的最简单的
UPDATE
来更新该字段是:
UPDATE records._default._default
USE KEYS "doc1"
SET `keys`.`abc-123-evaluation`.`version` = {"major":9, "minor":9, "patch":9}