我正在使用nodeJS + Express + Mongoose + mongoDB
这是我的mongoDB用户架构:
{
friends: [ObjectId]
friends_count: Number
}
每当用户添加朋友时,friendId将被推送到friends数组,而friends_count将增加1.
也许有很多动作会改变好友阵列,也许我会忘记增加friends_count。所以我想确保friends_count总是等于friends.length
有没有一种好方法或框架可以确保所有这些?
P.S
我知道如何更新friends_count。我的意思是如果我忘了怎么办?
有没有办法自动保持这两个属性同步?
答案 0 :(得分:1)
使用$ne
运算符作为.update()
和$inc
运算符的“查询”参数,当{“3} $push
数组中不存在”朋友“时应用新成员:
User.update(
{ "_id": docId, "friends": { "$ne": friendId } },
{
"$push": { "friends": friendId },
"$inc": { "friends_count": 1 }
},
function(err,numberAffected) {
}
)
要从列表中“删除”朋友,请使用$pull
执行相反的操作:
User.update(
{ "_id": docId, "friends": friendId },
{
"$pull": { "friends": friendId },
"$inc": { "friends_count": -1 }
},
function(err,numberAffected) {
}
)
这样,您的friends_count
与存在的数组元素数量保持同步。
答案 1 :(得分:1)
您需要做的就是在添加和删除功能中更新friends_count
。例如:
User.findById(userId, function (err, user) {
if (user) {
user.friends.push(friendId);
user.friends_count++;
user.save();
}
});
仅供参考,我不认为有必要添加friends_count,而您可以friends.length
获得朋友总数。