gpt4 book ai didi

mongodb - Mongo 中的 $pull 多个对象不起作用

转载 作者:可可西里 更新时间:2023-11-01 10:33:07 27 4
gpt4 key购买 nike

我有一个“节点”数组的子对象

这是我的 Mongo 文档结构

db.nodes.find()
{ _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
{ nodeid : "node11"
sku : [
"aaa",
"bbb",
"ccc"]
},
{ nodeid : "node12"
sku : [
"bbb",
"ddd"]
}]
}
{ _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
{ nodeid : "node21"
sku : [
"aaa",
"bbb",
"ddd"]
}]
}

我使用:

db.nodes.update({'nodes.sku': 'bbb'},{$pull: {'nodes.$.sku':'bbb'}}, {multi: 1})

有结果:

db.nodes.find()
{ _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
{ nodeid : "node11"
sku : [
"aaa",
"ccc"
]
},
{ nodeid : "node12"
sku : [
"bbb",
"ddd",
]
}
]
}
{ _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
{ nodeid : "node21"
sku : [
"aaa",
"ddd"
]
}
]
}

“node1.node12”仍然有对象“bbb”

我尝试使用:

db.nodes.update({'nodes': {$elemMatch: {'sku':'bbb'}}},{$pull: { nodes: {'sku':'bbb'}}}, {multi: 1})

并有结果:

db.nodes.find()
{ _id : ObjectId("skipped"),
nodeid : "node1"
nodes : [
]
}
{ _id : ObjectId("skipped"),
nodeid : "node2"
nodes : [
{ nodeid : "node21"
sku : [
"aaa",
"ddd"
]
}
]
}

我丢失了“node1”中的所有数据

并从“node2.node12”中更正拉取对象

一些建议

谢谢,瓦西里

最佳答案

很遗憾,您想要执行的操作尚不支持。如果您想投票,功能请求票在这里:

https://jira.mongodb.org/browse/SERVER-1243

同时,有几个选项:

  1. 重新设计您的文档。这是模型树结构的常见模式的链接:http://docs.mongodb.org/manual/tutorial/model-tree-structures/

  2. 继续您当前的设计并执行多个更新或执行查找、修改应用程序中的节点数组并执行多个更新。请注意,在这些情况下,您将无法在单个文档中自动进行所有修改。

关于mongodb - Mongo 中的 $pull 多个对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765077/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com