gpt4 book ai didi

javascript - Mongoose 从嵌套数组中删除一个对象

转载 作者:行者123 更新时间:2023-11-30 14:47:43 25 4
gpt4 key购买 nike

我正在尝试通过从嵌套数组中删除对象来使用 Mongoose 查找更新文档。我的目标文档如下:

user = {
"userId" : "myId",
"connections":
[{
"dateConnectedUnix": 1334567891,
"isActive": true,
"sessions": [
{"device": "mobile", "country": "US"},
{"device": "desktop", "country": "US"}
]
}, {
"dateConnectedUnix": 1334567893,
"isActive": false,
"sessions": [
{"device": "mobile", "country": "CA"},
{"device": "desktop", "country": "CA"}
]
}]
}

这是我的尝试,但它没有更新文档:

Users.findOneAndUpdate({ "userId": "myId", "connections.dateConnectedUnix": 1334567891 },
{ $pull: { sessions: { device: "mobile" } } }, (err) => {
if (err) {
return res.status(404).json({ message: 'Error' });
}
return res.status(200).json({
success: true,
message: 'success'
});
}
);

生成的文档应该如下所示:

user = {
"userId" : "myId",
"connections":
[{
"dateConnectedUnix": 1334567891,
"isActive": true,
"sessions": [
{"device": "desktop", "country": "US"}
]
}, {
"dateConnectedUnix": 1334567893,
"isActive": false,
"sessions": [
{"device": "mobile", "country": "CA"},
{"device": "desktop", "country": "CA"}
]
}]
}

基本上是通过 ID 查找用户,然后通过日期查找连接,然后删除移动设备。在我的特定情况下,结果始终是一个匹配的文档、一个匹配的连接和一个匹配的 session 。

最佳答案

因为你的 session 数组在连接中

尝试使用“connections.$.sessions”而不是 sessions,这样您的查询将是

Users.findOneAndUpdate({ "userId": "myId", "connections.dateConnectedUnix": 1334567891 },
{ $pull: { "connections.$.sessions" : { device: "mobile" } } }, (err) => {
if (err) {
return res.status(404).json({ message: 'Error' });
}
return res.status(200).json({
success: true,
message: 'success'
});
}
);

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

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