Arrays MongoDB-从对象数组中提取
我有一个收藏Arrays MongoDB-从对象数组中提取,arrays,mongodb,Arrays,Mongodb,我有一个收藏 { “_id”:ObjectId(“534bae30bf5049a522e502fe”), “数据”:[ { "0" : { “内容”:“1”, “类型”:“文本”, “ident”:正确 }, "1" : { “内容”:“, “类型”:“文本”, “ident”:false } }, { "0" : { “内容”:“2”, “类型”:“文本”, “ident”:正确 }, "1" : { “内容”:“, “类型”:“文本” } } ] } 内容是唯一的 如何删除与内容:“2”匹
{
“_id”:ObjectId(“534bae30bf5049a522e502fe”),
“数据”:[
{
"0" : {
“内容”:“1”,
“类型”:“文本”,
“ident”:正确
},
"1" : {
“内容”:“,
“类型”:“文本”,
“ident”:false
}
},
{
"0" : {
“内容”:“2”,
“类型”:“文本”,
“ident”:正确
},
"1" : {
“内容”:“,
“类型”:“文本”
}
}
]
}
内容
是唯一的
如何删除与内容:“2”
匹配的对象
我试过这个:
data:{$pull:{“content”:删除[i]}
其中删除[i]
是内容
还有一些变化,但我不能让它工作。我遗漏了什么?根据你的评论,你应该担心。我已经在PHP应用程序中见过几次了(PHP在转储数组中有这种有趣的表示法) 问题是“0”和“1”等元素本身创建子文档,而不是将该结构下的所有内容都作为子文档本身作为数组成员,那么在访问数组的各个成员时会遇到问题,因为所使用的路径需要是“绝对”的 因此,这实际上“强制”没有其他可能的选项通过等效的“点符号”形式访问元素。除了在本例中,它不仅是数组的“n”元素,而且是您需要寻址的实际路径 但如果这真的对你有用,而且看起来“有人”在试图逃避 “嵌套”阵列下的位置更新问题(有关详细信息,请参阅操作员文档),然后可以按如下方式执行更新: 基本声明如下:
db.collection.update(
{
“data.0.context”:2
},
{
“$pull”:{”data.$.0.context:“2}”
}
)
这确实“似乎”是一种有点滑稽的方式来写这篇文章,但是在调查你的实际结构之后,你应该能够看到为什么需要这样做的原因。基本上,这满足了使用位置$
运算符指示数组中第一个匹配元素(也称为“数据”)的索引,然后使用标准子文档表示法来指定要更新的元素的路径的要求
因此,如果元素实际处于未知位置,这当然会带来问题。但是要考虑的是,对于给定的限制,数组的实际使用对您来说是重要的?如果需要匹配“内部”元素的位置,则更改结构以将数组放入其中
但要始终了解限制的影响,并尝试根据引擎实际能做的事情进行建模。您是否可能从PHP中转储此内容?或者你的内容在mongo外壳中看起来是这样的吗?它在外壳中看起来是这样的。我应该为此担心吗?