如何确定文档的属性是否已有另一个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对象上尝试了所有我想到的但没有任何作用。
答案 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
friendId
将friends
添加到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}}