Tengo una colección de blogs que contiene el título, el cuerpo y la clasificación de agrregate que los usuarios les han otorgado. Otra colección 'Calificaciones' cuyo esquema hace referencia al blog, el usuario que calificó (si es que lo hace) en la forma de sus ObjectIds y la clasificación que le dieron, es decir, +1 o -1.Modelado de blogs y clasificaciones en mongodb y nodejs
Cuando un usuario en particular navega a través de los blogs en el 'último primero' orden (digamos 40 de ellos por página. Los llamamos una serie de blogs[0]
-blogs[39]
) Tengo que recuperar los documentos de calificación relacionados con este usuario en particular y los 40 blogs, si es que el usuario los calificó y le notificará qué clasificaciones ha otorgado a esos blogs.
Traté de extraer todos los documentos de calificación de un usuario en particular en el que los objetos de referencia del blog se encuentran entre blogs[0]._id
y blogs[39]._id
que devuelve la lista vacía en mi caso. Puede ser objeto. No se puede comparar usando las consultas $lt
y $gt
. En ese caso, ¿cómo debería hacerlo? ¿Debería rediseñar mis esquemas para que se ajusten a este escenario?
Estoy usando el controlador mongoosejs para este caso. Aquí están las partes relevantes del código que difieren un poco en la ejecución, pero usted tiene la idea.
esquemas:
Client= new mongoose.Schema({
ip:String
})
Rates = new mongoose.Schema({
client:ObjectId,
newsid:ObjectId,
rate:Number
})
News = new mongoose.Schema({
title: String,
body: String,
likes:{type:Number,default:0},
dislikes:{type:Number,default:0},
created:Date,
// tag:String,
client:ObjectId,
tag:String,
ff:{type:Number,default:20}
});
modelos:
var newsm=mongoose.model('News', News);
var clientm=mongoose.model('Client', Client);
var ratesm=mongoose.model('Rates', Rates);
Lógica:
newsm.find({tag:tag[req.params.tag_id]},[],{ sort:{created:-1},limit: buffer+1 },function(err,news){
ratesm.find({client:client._id,newsid:{$lte:news[0]._id,$gte:news.slice(-1)[0]._id}},function(err,ratings){
})
})
Editar: Si bien la aplicación de la debajo de dicho esquema, que tenía que hacer esta consulta en la mangosta. js
> db.blogposts.findOne()
{ title : "My First Post", author: "Jane",
comments : [{ by: "Abe", text: "First" },
{ by : "Ada", text : "Good post" } ]
}
> db.blogposts.find({ "comments.by" : "Ada" })
¿Cómo hago esta consulta en mangosta?
bien. Cambié mis esquemas como dijiste, pero todavía tengo problemas en cuanto a cómo obtengo las calificaciones otorgadas por el usuario para un determinado conjunto de blogs. ¿Puede por favor también ayudarme con respecto a la API específica? @Brandon –
¿Qué pasa si hay millones de tarifas para un artículo? ¿Es un problema para ese tipo de esquema? – Burak