Tengo una serie de reseñas, quiero recuperar solo una reseña de una serie de objetos dentro de un esquema.
Aquí está mi esquema:
const sellerSchema = new mongoose.Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: "User", unique: true, }, reviews: [ { by: { type: mongoose.Schema.Types.ObjectId, ref: "User", unique: true, }, title: { type: String, }, message: { type: String, }, rating: Number, imagesUri: [{ String }], timestamp: { type: Date, default: Date.now, }, }, ], });
¿Cómo puedo obtener una sola revisión de la matriz si 'por' será req.user._id? Tengo el código anterior, pero no funciona para recuperar la revisión solo que satisface la consulta.
try { const seller_id = mongoose.Types.ObjectId(req.params._id); const review = await Seller.findOne( { _id: seller_id }, { reviews: { $elemMatch: { by: req.user._id } } } //get the review that matches to the user_id ); res.status(200).send(review); } catch (err) { //sends the status code with error code message to the user res.status(502).send({ error: "Error retreiving review.", }); }
Esto recupera todo el documento del vendedor, pero solo quiero recuperar la revisión del objeto con el user_id dado === por: ObjectID
darle una oportunidad
try { const seller_id = mongoose.Types.ObjectId(req.params._id); const review = await Seller.findOne( { _id: seller_id , "reviews.by": req.user._id}, { "reviews.$": 1 } ); res.status(200).send(review);
}
Intente convertir también el _id
de usuario como ObjectId
y unifique sus condiciones en un solo objeto:
try { const seller_id = mongoose.Types.ObjectId(req.params._id); const user_id = mongoose.Types.ObjectId(req.user._id); const review = await Seller.findOne({ _id: seller_id, reviews: { $elemMatch: { by: user_id } }, }); res.status(200).send(review); } catch (err) { //sends the status code with error code message to the user res.status(502).send({ error: 'Error retreiving review.', }); }