同时更新mongoose模式字段

时间:2015-02-11 08:58:08

标签: node.js mongodb mongoose mean-stack

我正在尝试更新mongoose架构。基本上我有两个api的'/ follow /:user_id'和'/ unfollow /:user_id'。我想要实现的是每当用户A跟随用户B时,mongoose中的用户B跟随者字段将​​递增为一个。

至于现在,我设法只让跟随字段增加一个而不是跟随者字段。

schema.js

var UserSchema = new Schema({
    name: String,
    username: { type: String, required: true, index: { unique: true }},
    password: { type: String, required: true, select: false },
    followers: [{ type: Schema.Types.ObjectId, ref: 'User'}],
    following: [{ type: Schema.Types.ObjectId, ref: 'User'}],
    followersCount: Number,
    followingCount: Number

});

更新版本:我尝试了我的解决方案,但每当我发布它时,它只是获取数据(我在POSTMAN chrome应用程序上尝试了api)。

api.js

    // follow a user



 apiRouter.post('/follow/:user_id', function(req, res) {

        // find a current user that has logged in
            User.update(
                {   
                    _id: req.decoded.id, 
                    following: { $ne: req.params.user_id } 
                }, 

                { 
                    $push: { following: req.params.user_id},
                    $inc: { followingCount: 1}

                },
                function(err) {
                    if (err) {
                        res.send(err);
                        return;
                    }

                    User.update(
                        {
                            _id: req.params.user_id,
                            followers: { $ne: req.decoded.id }
                        },

                        {   
                            $push: { followers: req.decoded.id },
                            $inc: { followersCount: 1}

                        }

                    ), function(err) {
                        if(err) return res.send(err);

                        res.json({ message: "Successfully Followed!" });
                    }

            });
    });

这些代码只能增加用户的以下字段,而不会重复。如何同时更新登录用户的关注字段以及其他用户的关注者字段?

更新版本:它不断提取数据。

enter image description here

1 个答案:

答案 0 :(得分:0)

可能这就是你想要的。您也可以使用来自Mongoose查询的update,而不是使用findOneAndUpdate

apiRouter.post('/follow/:user_id', function(req, res) {
    User.findOneAndUpdate(
    {
        _id: req.decoded.id
    },
    {
        $push: {following: req.params.user_id},
        $inc: {followingCount: 1}
    },
    function (err, user) {

        if (err) 
            res.send(err);

        User.findOneAndUpdate(
        {
            _id: req.params.user_id
        },

        {   
            $push: {followers: req.decoded.id},
            $inc: {followersCount: 1}
        },
        function (err, anotherUser) {
            if (err)
                res.send(err);

            res.json({message: "Successfully Followed!"})
        });

    });
}

如果您不确定它是否已更新,则只需对console.log()user变量使用anotherUser即可查看更改。