NodeJS mongoose模型中的参考未给出输出

r6hnlfcb  于 2022-11-03  发布在  Node.js
关注(0)|答案(2)|浏览(137)

我正在使用mongoose来定义架构我有user和Userdetail两个架构我需要userdetail中user数据
我有下面的模式,但我没有得到输出。我认为代码是正确的,但不知道为什么没有输出...相反,我得到的是空数组。

const mongoose = require("mongoose")

const UserDetailSchema = mongoose.Schema({
    Phone : {
        type : Number
    },
    FirstName : {
        type : String
    },
    LastName : {
        type : String
    },
    productimage : {
        data : Buffer,
        contentType : String
    },
    IsDeleted:{
        type:Boolean,
        default:false
    },
    UserID : {
        type : String,
    },
    data : [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "user"
    }],
},
{timestamps: true})

const UserDetail = new mongoose.model("userdetail",UserDetailSchema);

module.exports = UserDetail;

我的用户模式是,

const mongoose = require("mongoose");

    const UserSchema = mongoose.Schema({
      email: {
        type: String,
        required: true
      },
      password: {
        type: String,
        required: true
      },
      IsDeleted:{
        type:Boolean
      },
    },
    {timestamps: true});

    module.exports = mongoose.model("user", UserSchema);

查询为,

<pre>

router.get("/UserDetail",async (req,res)=>{
    try{
        const UsersData= await UserDetail.find();
        res.json(UsersData)
    }catch(e){
        res.status(500).json({ message: e.message })
    }
})

</pre>

即使我只使用find,我也必须只使用id获取数据,对吗?
输出为-

任何帮助都将不胜感激

router.patch("/UserDetail/:id",Auth,upload.single("productimage"),async(req,res)=>{

    try{

        const id = req.params.id;

        const updatedData = req.body;

        updatedData.productimage = {data: fs.readFileSync('upload/' + req.file.filename),
        contentType: 'image/png'};
        const options = { new: true };

        const result = await UserDetail.findOneAndUpdate(
            id, updatedData, options
        )

        res.send(result)
    }catch(e){
        res.status(500).json({ message: e.message })
    }
})
nqwrtyyt

nqwrtyyt1#

可以使用populate函数填充字段:

const userDetails = await UserDetail.find({}).populate('data').exec();
pxy2qtax

pxy2qtax2#

首先,您需要对userDetail模式中的userID进行一些更改。请将其更改为UserID:{type : mongoose.Schema.Types.ObjectId},,因为这将在将来的聚合过程中对您有所帮助。您还可以从userDetail模型中删除数据,因为在您保存数据之前,它不会存储任何数据。最后,尝试运行此聚合查询。

const UsersData= await UserDetails.aggregate([
    {$lookup:
     {
     from: "users",
     localField: "userID",
     foreignField: "_id",
     as: "data" 
     }
    }])

这样,您的用户的详细信息将显示在数据数组中。

相关问题