我正在尝试更新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!" });
}
});
});
这些代码只能增加用户的以下字段,而不会重复。如何同时更新登录用户的关注字段以及其他用户的关注者字段?
更新版本:它不断提取数据。
答案 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
即可查看更改。