如何解决在MongoDB聚合管道中分解数组
我想知道是否仍然可以在MongoDB聚合管道中对数组进行解构,从而使我的代码更加整洁。
例如,我有以下聚合管道。
await User.aggregate([
{ $match: { _id: userID } },{
$project: { chatLogs: 1,username: 1,profilePicURL: 1 },},{ $unwind: "$chatLogs" },{
$lookup: {
from: "users",let: { recipientID: "$chatLogs.recipientID" },pipeline: [
{
$match: { $expr: { $eq: ["$_id","$$recipientID"] } },{ $project: { profilePicURL: 1 } },],as: "chatLogs.recipientID",]);
查询时会得到以下结果:
{
"_id": "5f2ffb54eea9c2180a732afa","username": "joe","profilePicURL": "/images/profile/default_profile.png","chatLogs": {
"recipientID": [
{
"_id": "5f2faf5ad18a76073729f475","profilePicURL": "/images/profile/default_profile.png"
}
],"chat": "5f30b6c3d117441c2abda1ba"
}
}
就我而言,由于“ recipientID”代表默认的MongoDB ID,因此它将始终是唯一的。因此,我希望使用以下方法,其中所得的receiveID字段不再是无意义的数组
所需结果:
{
"_id": "5f2ffb54eea9c2180a732afa","chatLogs": {
"recipientID": {
"_id": "5f2faf5ad18a76073729f475","profilePicURL": "/images/profile/default_profile.png"
}
"chat": "5f30b6c3d117441c2abda1ba"
}
}
解决方法
您可以在最后一个管道中使用recipientID
解构$unwind
数组,
await User.aggregate([
... // your all pipelines
// add this line
{ $unwind: "$chatLogs.recipientID" }
]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。