我有以下文件结构
{
"_id" : ObjectId("5ffef283f1f06ff8524aa2c2"),
"applicationName" : "TestApp",
"pName" : "",
"environments" : [],
"stages" : [],
"createdAt" : ISODate("2021-01-15T09:51:35.546Z"),
"workflows" : [
[
{
"pName" : "Test1",
"wName" : "TestApp_Test1",
"agent" : ""
},
{
"pName" : "Test2",
"wName" : "TestApp_Test2",
"agent" : ""
}
],
[
{
"pName" : "Test1",
"wName" : "TestApp_Test1",
"agent" : ""
}
]
],
"updatedAt" : Date(-62135596800000)
}
我希望删除出现的
{
"pName" : "Test1",
"wName" : "TestApp_Test1",
"agent" : ""
}
因此,生成的文档应类似于
{
"_id" : ObjectId("5ffef283f1f06ff8524aa2c2"),
"applicationName" : "TestApp",
"pName" : "",
"environments" : [],
"stages" : [],
"createdAt" : ISODate("2021-01-15T09:51:35.546Z"),
"workflows" : [
[
{
"pName" : "Test2",
"wName" : "TestApp_Test2",
"agent" : ""
}
]
],
"updatedAt" : Date(-62135596800000)
}
我已经尝试过以下mongo查询
db.getCollection('workflows').update({_id:ObjectId('5ffef283f1f06ff8524aa2c2')}, {$pull:{workflows: { $elemMatch: {pipelineName: 'Test1'}}}} )
因为匹配了Test1,所以这将从包括Test2的工作流字段中删除所有文档。
我们如何只删除Test1的条目并保留其他条目?
您可以使用位置运算符“ $ []”来实现:
db.getCollection('workflows').update({_id: ObjectId("5ffef283f1f06ff8524aa2c2") }, {$pull: {"workflows.$[]":{pName:"Test1" } } } )
但是架构看起来有些奇怪,并且在更新之后,如果所有元素都在子数组中删除,则工作流中将有空数组。要修复空的子数组,您将需要执行第二次操作以将其删除:
db.getCollection('workflows').update({_id: ObjectId("5ffef283f1f06ff8524aa2c2") }, {$pull: {"workflows":[] } } )
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句