首页 > 解决方案 > Mongoose DB Lookup 管道匹配问题

问题描述

我有 2 个收藏

一次是用户,一次是UserBmi

我打算加入收藏以查找最新的 BMI 记录。在此表中,一些用户不会上传他们的 BMI 记录。到数据库。我想返回结果的空行。但是,结果将返回所有用户都返回相同的记录(其中一个用户的最新 BMI 记录)。

当我匹配 2 个集合时,我会遗漏一些东西吗?

用户表

const userSchema  = new mongoose.Schema({
    usercardid:{
        type:Number,
        required: true,
        unique: true
    },
    name:{
        type:String,
        required: true
    }... 
}) 

体重指数表

const userbmigoriesSchema  = new mongoose.Schema({

    user_id:{
        type:mongoose.Schema.Types.ObjectId,
        ref: "User"
    },
    user_height:{
        type:Number,
        required: true
    },
    user_weight:{
        type:Number,
        required: true
    },
    user_bmi:{
        type:Number,
        required: true
    },
    date:{
        type: Date,
        required: true,
        default: Date.now()
    }
})
const users = await User.aggregate([
        {
            $lookup:{
                from: "userbmis",
                let: {"uid": "user_id"},
                pipeline: [{
                    $match: { $expr: { $eq: ["$$uid","$id" ]}}},
                    {$sort: {"date": -1}},
                    {$limit: 1}
                ],
                as: "userbmis"
            }
        }
    ]) 

在此处输入图像描述 在这张图片中,所有的身高、体重、BMI 记录都属于第三个用户。

= MongooseDB 数据 在图像上,您可以看到第 2 行到第 6 行的 BMI 记录属于用户 608915308462c0ccec435a97。但是,当我查找数据时,每个用户都会得到相同的记录。

在此处输入图像描述 在此处输入图像描述

标签: mongodbmongoose

解决方案


推荐阅读