Aquí, quiero excluir el documento del usuario que solicita la respuesta, así como todos aquellos usuarios a quienes el usuario ya envió solicitudes de amistad y los usuarios que ya son amigos del usuario, ¿cómo puedo lograr esto?
Desde el siguiente código, solo puedo excluir los datos del usuario, no los de otros.
try {
const {id} = req.params
const user = await userModel.findById(id)
const newresponse = await userModel.find({_id:user.friendRequests}).select("_id")
const response = await userModel.find({_id:{"$ne":id}}).sort({creation_date:-1}).limit(5)
return res.json({succcess:true, response, newresponse})
} catch (error) {
console.log(error);
}
modelo:
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
firstname: String,
lastname: String,
password: String,
email: {
type: String,
unique: true,
},
birthday: Date,
creation_date: {
type: Date,
default: Date.now,
},
gender: String,
profile_picture: {
type: String,
default: "",
},
friends:[{
type:mongoose.ObjectId,
ref:"userModel"
}],
friendRequests:[{
type:mongoose.ObjectId,
ref:"userModel"
}]
});
module.exports = mongoose.model("userModel", userSchema);
Puede concatenar arrays de friends y friendRequests y pasar eso al filtro:
const { id } = req.params;
const user = await userModel.findById(id, 'friends friendRequests');
const excludeUsersArray = user.friends.concatenate(user.friendRequests);
const response = await userModel.find({ _id: { "$nin": excludeUsersArray }}).sort({ creation_date:-1 });
return res.json({succcess:true, response})