如何确定Mongoose对象在数组中是否有ID?
如何确定文档的属性是否已经有另一个ObjectId的实例?我已经拥有数据库中的文档,所以我不想再次访问数据库 例如:如何确定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
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仅当它不存在时才使用。