Node.js 猫鼬';s populate()不从数据库返回数据

Node.js 猫鼬';s populate()不从数据库返回数据,node.js,mongodb,reactjs,mongoose,Node.js,Mongodb,Reactjs,Mongoose,我有以下模式,Base是所有信息收集器的模式: const BaseSchema = mongoose.Schema({ creatorId: { type: mongoose.Schema.Types.ObjectId, required: true }, title: { type: String, required: true }, created: { type: Date, default: Date.now() }, users: [{ type: mongoose.

我有以下模式,Base是所有信息收集器的模式:

const BaseSchema = mongoose.Schema({
  creatorId: { type: mongoose.Schema.Types.ObjectId, required: true },
  title: { type: String, required: true },
  created: { type: Date, default: Date.now() },
  users: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
  messages: [{ type: mongoose.Schema.Types.ObjectId, ref: "Message" }]
});
以及:

(我有一个用于
消息的
,看起来差不多)
后者在
const User=mongoose.model(“User”,UserSchema)中称为
User
当我创建一个新基地时,我会自动将一个用户添加到其中的列表中。在DB中,我可以看到用户确实存在,但当我调用以下命令时,字段不会填充:

Base.find({ creatorId: req.params.id })
    .populate("users", "messages")
    .exec()
    .then(data => console.log(data));
我从console.log获得以下信息:

[ { created: 2018-09-05T03:41:45.416Z,
    users: [],
    messages: [],
    _id: 5b8f508b2760c5329c13a9be,
    creatorId: 5b86f7970cd98b2004969bf0,
    title: 'testBase1',
    __v: 1 } ]
当我第一次通过React-front-end创建base时,base被添加到一个列表中,我看到
users.length
是1,或者是自动创建的用户的长度。但是,当我刷新页面时,控制台中的userlist是空的

添加: 忘记显示如何在创建时填充用户列表:

router.post("/add", jwtAuth, (req, res) => {
    Base.create({
        creatorId: req.body.userId,
        title: req.body.title
    }).then(baseInfo => {
        BaseUser.create({
            userId: req.body.username,
            baseId: baseInfo._id,
            created: Date.now(),
            acceptedMembership: true,
            isCreator: true
        })
            .then(baseuser => {
                baseInfo.users.push(baseuser);
                return baseInfo.save();
            })
            .then(base => res.json(base.serialize()));
    });
});

回答

.populate("users", "messages")
首先,将从
用户
返回
消息
。它必须是两个单独的条目,如下所示:

        .populate("users")
        .populate("messages")
然后,在模型中

users: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
指错误的
ref
。一定是这样

users: [{ type: mongoose.Schema.Types.ObjectId, ref: "BaseUser" }],

最后,我不确定是否需要这样做,但我在每个要填充的项目中添加了一个
ref

baseId: { type: mongoose.Schema.Types.ObjectId, required: true, ref: "Base" },
baseId: { type: mongoose.Schema.Types.ObjectId, ref: "Base" },
现在,它就像一个符咒,没有额外的
fetch

const BaseUser = mongoose.model("BaseUser", BaseUserSchema);
baseId: { type: mongoose.Schema.Types.ObjectId, required: true, ref: "Base" },
baseId: { type: mongoose.Schema.Types.ObjectId, ref: "Base" },