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

如何确定Mongoose对象在数组中是否有ID?,mongoose,Mongoose,如何确定文档的属性是否已经有另一个ObjectId的实例?我已经拥有数据库中的文档,所以我不想再次访问数据库 例如: var userSchema = new mongoose.Schema({ email: { type: String, unique: true, lowercase: true }, friends: [ type: mongoose.Schema.Types.ObjectId, ref: 'User' ] }); 而且,我已经有了用户文档: var fr

如何确定文档的属性是否已经有另一个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
    }
}

我已经尝试了所有我能想到的模式和用户对象,但没有任何效果。

您提到您尝试了
indexOf(friendId)
,但事实上,这就是如何做到这一点:

var-friendId=req.body.friendId;
User.findOne({email:req.body.email},函数(err,User){
如果(!用户){
返回res.status(400).send({message:'User not found'});
}否则{
if(user.friends.indexOf(friendId)=-1){
//friendId不在user.friends中;请添加它
}否则{
//friendId已经存在
}
}
}
或者,根据您最终要做的事情,您可以通过一个
更新
friendId
添加到
friends
数组中来完成这一切,前提是该数组尚未出现:

User.update(
{email:req.body.email},
{$addToSet:{friends:friendId},
函数(错误、计数){
如果(!计数){
返回res.status(400).send({message:'User not found'});
}
...
}
);
此外,这可能只是一个输入错误,但我必须将
userSchema
更改为以下内容以使其有效:

var userSchema=newmongoose.Schema({
电子邮件:{type:String,unique:true,小写:true},
朋友:[{type:mongoose.Schema.Types.ObjectId,ref:'User'}]
});

任何不能直接使用.indexOf(friendId)的原因和任何其他数组一样?当然我试过了。它不起作用。我假设它与架构中未初始化ObjectId数组有关?或者可能与某些奇怪的数据类型有关?你击败了我。我只是验证了这一点。谢谢。我想我想知道是否有一些神奇的函数可以插入新的val仅当它不存在时才使用。