javascript - 如何更新 DocumentDB 中双嵌套数组中的嵌入文档
问题描述
我想更新双嵌套数组中的嵌入文档。
所以目标是更新
"switchState": "live"
在以下条件匹配上
cuid: req.params.cuid
Input.Id: req.params.id
我已经尝试过以下代码 mongoDb 并且有效
await Workflow
.findOneAndUpdate({
// createdBy: req.user._id,
cuid: req.params.cuid,
'inputFillers': {
$elemMatch: {
$elemMatch: {
"Input.Id": req.params.fillerInputId
}
}
}
},
{
$set: {
'inputFillers.$.0.switchState': req.params.switchType
}
},
{ new: true }
)
.lean()
.exec()
它会更新我为每个输入 ID 所做的每个选择。
但是相同的代码不适用于 DocumentDb(MongoDb 兼容版本 4.2)
这是 AWS 网站上关于 $elemmatch for documentDB 的一些建议
我已经尝试关注 documentDB
await Workflow
.findOneAndUpdate({
// createdBy: req.user._id,
cuid: req.params.cuid,
// 'inputFillers.0.0.Input.Id': req.params.fillerInputId,
$and: [{
'inputFillers': {
$elemMatch: {
$elemMatch: {
"Input.Id": req.params.fillerInputId
}
}
}
}]
},
{
$set: {
'inputFillers.$.0.switchState': req.params.switchType
}
},
{ new: true }
)
.lean()
.exec()
但它不起作用,只有时间它起作用,如果我使用
{
$set: {
'inputFillers.0.0.switchState': req.params.switchType
}
}
代替
{
$set: {
'inputFillers.$.0.switchState': req.params.switchType
}
}
但这总是只更新第一个元素,这违背了目的。
我一直在探索,并且读到有人建议为 mongoDb 使用 $map、$filter,但是使用双嵌套数组还没有取得太大的成功。
这是我编写的地图过滤器函数,不知道在这种情况下如何将其转换为 mongo
function switchInputFiller(input, switchTo) {
let newInputFiller = inputFillers
.map(firstEach => firstEach[0])
.filter(each => {
if (each.Input.Id == input) {
return each.switchState = switchTo
}
})
// console.log()
return newInputFiller
}
console.log("New Input Filler is ", switchInputFiller('8857157', "filler"))
这是样本数据
{
cuid: "cktzaqcr700001fpmypaa90zm",
inputFillers: [
[
{
"Input": {
"Arn": "some arn",
"AttachedChannels": [],
"Destinations": [],
"Id": "6465886",
"InputClass": "STANDARD",
"InputDevices": [],
"InputSourceType": "STATIC",
"MediaConnectFlows": [],
"Name": "tes01-84798-filer-input-0",
"SecurityGroups": [],
"Sources": [
{
"Url": "some url"
},
{
"Url": "some url"
}
],
"State": "DETACHED",
"Tags": {
"resourceScope": "API-DRIVEN-MEDIALIVE-INPUT-FILLER",
"mediaProject": "SOCIAL-STREAMING",
"socialEvent": "tes01-84798"
},
"Type": "MP4_FILE"
},
"runtime": "now",
"fillerName": "somefiller",
"switchState": "live"
}
],
[
{
"Input": {
"Arn": "some arn",
"AttachedChannels": [],
"Destinations": [],
"Id": "8857157",
"InputClass": "STANDARD",
"InputDevices": [],
"InputSourceType": "STATIC",
"MediaConnectFlows": [],
"Name": "tes01-84798-filer-input-1",
"SecurityGroups": [],
"Sources": [
{
"Url": "some url"
},
{
"Url": "some url"
}
],
"State": "DETACHED",
"Tags": {
"resourceScope": "API-DRIVEN-MEDIALIVE-INPUT-FILLER",
"mediaProject": "SOCIAL-STREAMING",
"socialEvent": "tes01-84798"
},
"Type": "MP4_FILE"
},
"runtime": "now",
"fillerName": "730ivi",
"switchState": "live"
}
]
]
},
{
cuid: "cktzaqcr700001fpmypaa90AB",
inputFillers: [
[
{
"Input": {
"Arn": "some arn",
"AttachedChannels": [],
"Destinations": [],
"Id": "6465886",
"InputClass": "STANDARD",
"InputDevices": [],
"InputSourceType": "STATIC",
"MediaConnectFlows": [],
"Name": "tes01-84798-filer-input-0",
"SecurityGroups": [],
"Sources": [
{
"Url": "some url"
},
{
"Url": "some url"
}
],
"State": "DETACHED",
"Tags": {
"resourceScope": "API-DRIVEN-MEDIALIVE-INPUT-FILLER",
"mediaProject": "SOCIAL-STREAMING",
"socialEvent": "tes01-84798"
},
"Type": "MP4_FILE"
},
"runtime": "now",
"fillerName": "somefiller",
"switchState": "live"
}
],
[
{
"Input": {
"Arn": "some arn",
"AttachedChannels": [],
"Destinations": [],
"Id": "8857157",
"InputClass": "STANDARD",
"InputDevices": [],
"InputSourceType": "STATIC",
"MediaConnectFlows": [],
"Name": "tes01-84798-filer-input-1",
"SecurityGroups": [],
"Sources": [
{
"Url": "some url"
},
{
"Url": "some url"
}
],
"State": "DETACHED",
"Tags": {
"resourceScope": "API-DRIVEN-MEDIALIVE-INPUT-FILLER",
"mediaProject": "SOCIAL-STREAMING",
"socialEvent": "tes01-84798"
},
"Type": "MP4_FILE"
},
"runtime": "now",
"fillerName": "netflix",
"switchState": "live"
}
]
]
}
解决方案
推荐阅读
- java - 主机名不能为空
- c - 我如何使用 sizeof(指针)。所以我得到 sizeof(array)。指针指向数组
- php - 类 App\Http\Requests\MyCustomRequest 不存在 - Laravel 6
- docker - 使用 Docker Compose 将 nestjs 连接到 redis
- c - 作为 C 中结构成员的数组的指针算术
- c# - ASP.NET Core 瞬态 DbContext
- angular - 使现有行只读,而新行可编辑Angular FormArray
- matlab - 如何以不同格式保存matlab图形,即矢量格式的标签和刻度,而位图格式的图像?
- android - 如何构建可以使用网络内的打印机打印文件(PDF、照片等)的 Android 应用程序?
- java - 数组依赖和递归