Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose填充数组为空_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose填充数组为空

Javascript Mongoose填充数组为空,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在model.js中定义了一个UserSchema和一个PostSchemaUserSchema有一个对自己的Posts的引用,而PostSchema有一个对其作者的引用 在我的controllers.js方法中,我正在创建一个用户和一个post实例(绑定到新创建的用户)。我现在尝试填充用户的帖子,但mongoose返回一个空数组。然而,另一种方法是可行的(我能够通过Post实例检索用户) models.js controllers.js getUser的结果(posts为空): getPos

我在model.js中定义了一个
UserSchema
和一个
PostSchema
UserSchema
有一个对自己的
Post
s的引用,而
PostSchema
有一个对其作者的引用

在我的
controllers.js
方法中,我正在创建一个用户和一个post实例(绑定到新创建的用户)。我现在尝试填充用户的帖子,但mongoose返回一个空数组。然而,另一种方法是可行的(我能够通过Post实例检索用户)

models.js

controllers.js

getUser
的结果(posts为空):

getPost
result(正确返回了作者)


您需要将post id推送到用户模型中的posts数组中,如下所示

const getUser = (req, res) => {
    const newUser = new models.User({ username: 'JohnDoe' });

    newUser.save(user => {
        if (err) return res.json(err);

        const newPost = new models.Post({
            content: 'New Post',
            author: user._id
        });

        newPost.save(post => {
            if (err) return res.json(err);

            models.User.findByIdAndUpdate(user._id,
                { '$push': { 'posts': post._id } },
                { 'new': true }
            )
            .populate('posts')
            .exec((err, u) => {
                res.json(u);
            })
        });
    });
}
使用异步/等待

const getUser = async (req, res) => {
    try {
        const newUser = new models.User({ username: 'JohnDoe' });
        const user = await newUser.save();

        const newPost = new models.Post({
            content: 'New Post',
            author: user._id
        });
        const post = await newPost.save();

        const result = await models.User.findByIdAndUpdate(user._id,
            { '$push': { 'posts': post._id } },
            { 'new': true }
        )
        .populate('posts')
        .exec();

        res.json(result)
    } 
    catch (err) {
        return res.json(err);  
    }
}

我找不到您将帖子Id添加到用户模型中的位置。您是指类似user.posts.push(post.Id)的内容吗?是的,没错。。。。。
{
    "posts": [],
    "_id": "5b9426a6fd187d3949470f54",
    "username": "JohnDoe",
    "__v": 0
}
{
    "_id": "5b94287e99072c3a173419f2",
    "content": "NewPost",
    "author": {
        "posts": [],
        "_id": "5b94287e99072c3a173419f0",
        "username": "JohnDoe",
        "__v": 0
    },
    "__v": 0
}
const getUser = (req, res) => {
    const newUser = new models.User({ username: 'JohnDoe' });

    newUser.save(user => {
        if (err) return res.json(err);

        const newPost = new models.Post({
            content: 'New Post',
            author: user._id
        });

        newPost.save(post => {
            if (err) return res.json(err);

            models.User.findByIdAndUpdate(user._id,
                { '$push': { 'posts': post._id } },
                { 'new': true }
            )
            .populate('posts')
            .exec((err, u) => {
                res.json(u);
            })
        });
    });
}
const getUser = async (req, res) => {
    try {
        const newUser = new models.User({ username: 'JohnDoe' });
        const user = await newUser.save();

        const newPost = new models.Post({
            content: 'New Post',
            author: user._id
        });
        const post = await newPost.save();

        const result = await models.User.findByIdAndUpdate(user._id,
            { '$push': { 'posts': post._id } },
            { 'new': true }
        )
        .populate('posts')
        .exec();

        res.json(result)
    } 
    catch (err) {
        return res.json(err);  
    }
}