如何确定Mongoose对象是否在数组中有ID?

时间:2014-12-21 16:45:27

标签: mongoose

如何确定文档的属性是否已有另一个ObjectId的实例?我已经拥有了数据库中的文档,所以我不想再次访问数据库了吗?

示例:

var userSchema = new mongoose.Schema({
    email: { type: String, unique: true, lowercase: true },
    friends: [ type: mongoose.Schema.Types.ObjectId, ref: 'User' ]
});

并且,我已经拥有用户文档:

var friendId = req.body.friendId;

User.findOne({ email: req.body.email }, function(err, user){
    if (!user){
        return res.status(400).send({ message: 'User not found' });
    } else {
        // DETERMINE IF 'friends' ARRAY ALREADY HAS THE friendId
        // ADD THE friendId IF IT DOES NOT EXIST
    }
}

我已经在Schema和User对象上尝试了所有我想到的但没有任何作用。

1 个答案:

答案 0 :(得分:2)

您提到您尝试了indexOf(friendId),但事实上,这是怎么做的:

 
var friendId = req.body.friendId;

User.findOne({ email: req.body.email }, function(err, user){
    if (!user){
        return res.status(400).send({ message: 'User not found' });
    } else {
        if (user.friends.indexOf(friendId) === -1) {
            // friendId is not already in user.friends; add it
        } else {
            // friendId already exists
        }
    }
}

或者,根据您最终要做的事情,您可以使用update friendIdfriends添加到User.update( { email: req.body.email }, { $addToSet: { friends: friendId } }, function(err, count){ if (!count){ return res.status(400).send({ message: 'User not found' }); } ... } ); 的{​​{1}}来完成所有操作数组,只有它不存在时才会出现:

userSchema

此外,它可能只是一个拼写错误,但我必须将var userSchema = new mongoose.Schema({ email: { type: String, unique: true, lowercase: true }, friends: [ { type: mongoose.Schema.Types.ObjectId, ref: 'User' } ] }); 更改为以下内容才能使其有效:

{{1}}