javascript - 如何在 Mongodb 中对多个数组使用聚合映射和过滤器

标签 javascript arrays mongodb aggregate aggregate-functions

这里我有两个数组,

 Usercar = [{
            parentId :001
            cars:[
                   {_id: 1, name: bmw, color: red},
                   {_id: 2, name: Ford, color: black},
                   {_id: 3, name: Volkswagen, color: black},
                 ]
              }]


 Userfavorite = 
               [{
                  parentId :001,
                  favoriteCars:[1,3] //mongoose.Types.ObjectId
               }]

我想使用 mongodb 聚合显示用户最喜欢的汽车,这是我的代码

let carsId= [1,3];


    {$match: {
        parentId :001
    }},
    {
        $project:{
            cars:{
                $filter:{

                        input:"$cars",
                        as :'cars',
                        cond:{ $eq :["$$cars._id", mongoose.Types.ObjectId('1')]}
                      //cond:{ $eq :["$$cars._id", carsId]}
                }
            }
        }
    }

上面的代码仅有效,当传递单个 carsId 时,我想从 Usercar 的集合中获取用户最喜欢的汽车详细信息,如何在 mongodb 聚合中做到这一点?

最佳答案

可以做到这一点的一种可能的聚合是:

  • 汇总 Usercar 集合
  • 从用户最喜欢的集合中查找匹配的文档
  • 如果有多个收藏夹文档,请将它们组合成一个收藏夹数组
  • 减少汽车集合以查找与收藏夹匹配的汽车,然后添加到数组中
db.Usercar.aggregate([
  {$lookup: {
      from: "Userfavorite",
      localField: "parentId",
      foreignField: "parentId",
      as: "favorite"
  }},
  {$set: {
      favorite: {
        $arrayElemAt: [
          {$concatArrays: "$favorite.favoriteCars"},
          0
        ]
      }
  }},
  {$addFields: {
      favoriteCarDetails: {
        $filter: {
          input: "$cars",
          cond: {
            $in: [
              "$$this._id",
              "$favorite"
            ]
          }
        }
      }
  }}
])

Playground

关于javascript - 如何在 Mongodb 中对多个数组使用聚合映射和过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61356767/

相关文章:

c - 标记字符串

php删除数组中的重复项

mongodb - spring data mongodb "id"字段映射

linux - MongoDB 安装 hell

javascript - 从元素数组中获取类列表

node.js - 在AWS EC2中运行定制的mongo容器

javascript - 赋值后需要分号,然后是 js 字符串插值

javascript - 单击时添加悬停效果,如果再次单击则再次删除

javascript - 无法将图像接收为 blob

javascript - 使用 React 和 Django 处理许多 html 文件