猫鼬不会填充

问题描述 投票:0回答:1

我在MongoDB数据库中有两个集合:用户组件

用户的主键是_ id,它是数字。它由组件文档的created_byupdated_by字段引用。

除了populate之外,其他所有东西都运行良好,我不知道为什么。它保留值而不是相应的用户文档。我也尝试使用ObjectIds代替Numbers,但未做任何更改。

任何帮助将不胜感激。

我在模型和路由源上方列出了。

组件和用户模型

models / user.js

import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
    _id: Number,
    firstName: String,
    lastName: String,
    email: String,
    password: String,
});

const User = mongoose.model('User', userSchema);

export default User;

models / component.js

import mongoose from 'mongoose';

const componentSchema = new mongoose.Schema({
    name: String,
    category: String,
    package: String,
    box: Number,
    cell: Number,
    quantity: Number,
    note: String,
    link: String,
    created_by: {
        type: Number,
        ref: 'User'
    },
    created_on: Date,
    updated_by: {
        type: Number,
        ref: 'User'
    },
    updated_on: Date
});

const Component = mongoose.model('Component', componentSchema);

export default Component;

models / index.js

import Component from './component';
import User from './user';

const models = { Component, User };

export default models;

中间件

import models from './models';

app.use((req, res, next) => {
    req.context = { models };
    next();
});

组件布线

import { Router } from "express";
const router = Router();
...
var getComponents = async (req, res) => {
    const query = req.context.models.Component.find().populate('users');

    try {
        const results = await query;
        return res.status(200).send({ results: results });
    } catch (err) {
        return res.status(400).send({ error: err });
    }
}
...
router.get('/', getComponents)

export default router;

我也尝试使用exec

var getComponents = (req, res) =>
    req.context.models.Component.find().populate('users').exec().then(components => res.status(200).send({ results: components })).catch(err => res.status(400).send({ error: err }));

但是我得到了相同的结果。

node.js mongodb mongoose mongoose-populate
1个回答
0
投票

您需要为created_by字段使用ObjectId类型:

 created_by: {
        type: mongoose.Types.ObjectId,
        ref: 'User'
    }

并且像这样填充:

populate('created_by');
© www.soinside.com 2019 - 2024. All rights reserved.