gpt4 book ai didi

php - MongoDB/PHP : delete element from array

转载 作者:可可西里 更新时间:2023-11-01 09:06:59 25 4
gpt4 key购买 nike

问候,

我有以下 MongoDB 对象:

{
"_id": ObjectId("4d0e28938b012fe28754715a"),
"notifications": {
"0": {
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "1lfw70h789u13a1e67pv"
},
"1": {
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "iwoidjsoskqp23nlwof"
}
},
"toUname": "Eamorr"
}

我正在尝试删除元素 0,以便:

{
"_id": ObjectId("4d0e28938b012fe28754715a"),
"notifications": {
"0": {
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "iwoidjsoskqp23nlwof"
}
},
"toUname": "Eamorr"
}

这是我到目前为止(在 PHP 中)尝试过的方法,但无济于事:

$customerNotifications->update(array('toUname'=>$uname),array('$pull'=>array('notifications'=>$key)));

但它不起作用,我现在完全被困住了。

非常感谢任何帮助。提前致谢,

最佳答案

爱莫尔,

$pull 运算符对您正在使用的文档不起作用,因为“notifications”键不是真正的数组。它更像是一个嵌入式文档,带有编号键,使其表面上类似于一个数组。没有办法(据我所知)保留此文档结构并自动重命名编号键。

如果你稍微重构你的文档,看起来像这样:

{
"notifications": [
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "1lfw70h789u13a1e67pv"
},
{
"type": "privateMessage",
"fromUname": "Eamorr2",
"time": 1292773522,
"id": "iwoidjsoskqp23nlwof"
}
],
"toUname": "Eamorr"
}

元素仍将被隐式编号。它现在是一个数组,因此您可以免费获得它。您可以像这样使用 $pull 运算符(我不熟悉 PHP 驱动程序,所以我给您等效的 shell):

db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});

我随意使用“toUname”键来标识文档,但我想您会想要使用 _id 字段。此外,我使用消息的“id”键来识别要从数组中提取的消息,因为它更安全,并且确保您不会意外删除错误的消息,以防数组自此发生更改您确定了要删除的数组序号。

希望对您有所帮助。

关于php - MongoDB/PHP : delete element from array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4483897/

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