我有以下文件。我正在编写一个 API 来将
"dataTracking"
更新为 true
或 false
。我正在尝试根据 "userID"
、"ulcaApiKey"
和 "serviceProviderName"
进行更新。
{
"_id": {
"$oid": "64462ca4ff7e6dfc24d0eaeab"
},
"userID": "6a73afa4fc774dcdb28d5fffsd944511fD",
"email": "[email protected]",
"firstName": "SAM SAW Master",
"password": "$2b$12$IMYAkfdXBruXJm75O9P79.cZZHTA0SB9fvJDTN.cg7Fwtu/VBg/JS",
"isVerified": true,
"isActive": true,
"roles": [
"SAMUEL-DATASETS-CONTRIBUTOR"
],
"apiKeyDetails": [
{
"appName": "apspDs",
"ulcaApiKey": "05ff4569ff-9cc1-4959-a39e-94e90e01de6s",
"createdTimestamp": "1681467785",
"serviceProviderKeys": [
{
"serviceProviderName": "maddyyyyys",
"dataTracking": "true",
"inferenceApiKey": {
"name": "Authorization",
"value": "VBM0sd4D82pQsdckvUwBwI62pCP7sYuniYcA4-5cGS4LF77dUSfhxp-yxdvo4qglzJ8"
}
},
{
"serviceProviderName": "somwthing",
"dataTracking": "false",
"inferenceApiKey": {
"name": "Authorization",
"value": "qi5tpTvGXsdckMDDiqCfMk_UQIKab8QeRdt3Gse3ZnEnsCtitnMZilU0aPIHCZl6xaC"
}
},
{
"serviceProviderName": "somehtingfandall",
"dataTracking": "false",
"inferenceApiKey": {
"name": "Authorsization",
"value": "qi5tpTsdfvGXkMDDiqCfMk_UQIKab8QeRdt3Gse3ZnEnsCtitnMZilU0aPIHCZl6xaC"
}
}
]
},
{
"appName": "app",
"ulcaApiKey": "05ff4569ff-9cc1-4959-a39e-94e90e01de66",
"createdTimestamp": "1681467785",
"serviceProviderKeys": [
{
"serviceProviderName": "maddyyyyy",
"dataTracking": "false",
"inferenceApiKey": {
"name": "Authorization",
"value": "VBM0sd4D82pQkvUwBwI62pCP7sYuniYcA4-5cGS4LF77dUSfhxp-yxdvo4qglzJ8"
}
},
{
"serviceProviderName": "AI4Bharat",
"dataTracking": "false",
"inferenceApiKey": {
"name": "Authorization",
"value": "qi5tpTvGXkMDDiqCfMk_UQIKab8QeRdt3Gse3ZnEnsCtitnMZilU0aPIHCZl6xaC"
}
}
]
},
{
"appName": "appDummy",
"ulcaApiKey": "05ff4569ff-9cc1-4959-a39e-94e90e01de6D",
"createdTimestamp": "1681467785",
"serviceProviderKeys": [
{
"serviceProviderName": "dummyMaddy",
"dataTracking": "true",
"inferenceApiKey": {
"name": "Authorization",
"value": "VBM0sd4D82pQkvUwBwI62pCP7sYuniYcA4-5cGS4LF77dUSfhxp-yxdvo4qglzJ8"
}
}
]
}
]
}
我尝试了以下代码,但找不到结果。
db.getCollection("ulca-user").updateOne(
{
"userID": "6a73afa4fc774dcdb28d5fffsd944511fD",
"apiKeyDetails.ulcaApiKey": "05ff4569ff-9cc1-4959-a39e94e90e01de6s",
"apiKeyDetails.serviceProviderKeys.serviceProviderName": "maddyyyyys"
},
{
$set:{
"apiKeyDetails.serviceProviderKeys.dataTracking": "false"
}
}
)
如何使用
"dataTracking"
、"userID"
和 "ulcaApiKey"
更新 "serviceProviderName"
?
就像 @ray 评论的,
"arrayFilters"
非常适合这个用例。这是您可以做到的一种方法。
db.collection.update({
"userID": "6a73afa4fc774dcdb28d5fffsd944511fD",
"apiKeyDetails.ulcaApiKey": "05ff4569ff-9cc1-4959-a39e-94e90e01de6s",
"apiKeyDetails.serviceProviderKeys.serviceProviderName": "maddyyyyys"
},
{
"$set": {
"apiKeyDetails.$[key].serviceProviderKeys.$[name].dataTracking": "false"
}
},
{
"arrayFilters": [
{"key.ulcaApiKey": "05ff4569ff-9cc1-4959-a39e-94e90e01de6s"},
{"name.serviceProviderName": "maddyyyyys"}
]
})
上试试