gpt4 book ai didi

mongodb - 从嵌套对象数组中删除对象 mongodb

转载 作者:可可西里 更新时间:2023-11-01 10:00:12 26 4
gpt4 key购买 nike

我有一个包含志愿者信息的集合,它将志愿者列为一个对象数组。我可以显示每个志愿者的所有类次,但事实证明从数组中删除一个对我来说很困难:

示例数据:

"_id" : ObjectId("59180305c19dbaa4ecd9ee59"),
"where" : "Merchandise tent",
"description" : "Sell gear at the merchandise tent.",
"shifts" : [
{
"dateNeeded" : ISODate("2017-06-23T00:00:00Z"),
"timeslot" : "8:00 - NOON",
"needed" : 2,
"_id" : ObjectId("591807546a71c3a57d1a2105"),
"volunteers" : [
{
"fullname" : "Mary Mack",
"phone" : "1234567890",
"email" : "mary@gmail.com",
"_id" : ObjectId("591ce45bc7e8a8c7b742474c")
}
]
},

我可用的数据是:_id, where, shifts.timeslot, shifts.dateNeeded, volunteers.email

有人可以帮助我吗?假设 Mary Mack 想在商品帐篷的 8 点中午轮类时不做志愿者。她也可能列在其他类次下,但我们只想将她从该类次中删除。

最佳答案

您可以通过指定一些内容来匹配“文档”,然后将所需的“shifts”数组条目作为 .update() 的查询表达式来执行此操作。然后申请 positional $ operator对于匹配的数组索引 $pull :

db.collection.update(
{ "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
{ "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)

在这种情况下没关系,因为您只是试图“匹配”嵌套结构中的“外部”数组和 $pull有自己的查询参数来标识要删除的数组条目。

不过你真的应该小心使用“嵌套数组”。同时$pull像这样的操作有效,更新“内部”数组是不可能的,因为 positional $ operator只会匹配满足条件的“第一个”元素。因此,您的多次轮类“Mary Mack”示例只会在找到的第一个“轮类”数组条目中匹配。

关于mongodb - 从嵌套对象数组中删除对象 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124734/

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