Ho una raccolta di blog che contiene titolo, corpo e classificazione aggregata che gli utenti hanno assegnato loro. Un'altra raccolta 'Valutazioni' il cui schema si riferisce al blog, l'utente che ha valutato (se non li ha valutati) nella forma dei suoi ObjectId e il punteggio che hanno dato, ad es., +1 o -1.Modellazione di blog e classificazioni in mongodb e nodejs
Quando un particolare utente naviga attraverso i blog nel 'più tardi per inizio' ordine (diciamo 40 di loro per pagina. Chiamarli una serie di blogs[0]
-blogs[39]
) devo recuperare i documenti di rating relativi a questo particolare utente e quelli 40 i blog se l'utente li ha valutati e gli hanno comunicato quali valutazioni ha dato a quei blog.
Ho tentato di estrarre tutti i documenti di valutazione di un particolare utente in cui l'oggetto di riferimento del blog si trova tra blogs[0]._id
e blogs[39]._id
che restituisce l'elenco vuoto nel mio caso. Può essere oggettivo non può essere confrontato utilizzando le query $lt
e $gt
. In tal caso, come dovrei farlo? Devo ridisegnare i miei schemi per adattarli a questo scenario?
Sto utilizzando il driver mongoosejs per questo caso. Qui ci sono le parti rilevanti del codice che differiscono un po 'nell'esecuzione ma si ottiene l'idea.
schemi:
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}
});
modelli:
var newsm=mongoose.model('News', News);
var clientm=mongoose.model('Client', Client);
var ratesm=mongoose.model('Rates', Rates);
Logic:
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){
})
})
Edit: Mentre l'attuazione del sotto di detta schema, ho dovuto fare questa domanda in mangusta. 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" })
Come si esegue questa query in mangusta?
ok. Ho cambiato i miei schemi come hai detto, ma ho ancora problemi con il modo in cui ottengo le valutazioni fornite dall'utente per un determinato set di blog. Puoi aiutarmi anche per quanto riguarda l'API specifica? @Brandon –
Cosa succede se ci sono milioni di tariffe per un articolo? È un problema per quel tipo di schema? – Burak