如何保持数组成员数

时间:2016-03-24 02:28:27

标签: node.js mongodb mongoose mongodb-query

我正在使用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。我的意思是如果我忘了怎么办? 有没有办法自动保持这两个属性同步?

2 个答案:

答案 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获得朋友总数。