我在MongoDB数据库中有两个集合:用户和组件。
用户的主键是_ id,它是数字。它由组件文档的created_by和updated_by字段引用。
除了populate之外,其他所有东西都运行良好,我不知道为什么。它保留值而不是相应的用户文档。我也尝试使用ObjectIds代替Numbers,但未做任何更改。
任何帮助将不胜感激。
我在模型和路由源上方列出了。
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;
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;
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 }));
但是我得到了相同的结果。
您需要为created_by字段使用ObjectId类型:
created_by: {
type: mongoose.Types.ObjectId,
ref: 'User'
}
并且像这样填充:
populate('created_by');