У меня есть коллекция блогов, которая содержит заголовок, тело и совокупный рейтинг, который им дали пользователи. Другая коллекция «Рейтинги» ', чья схема имеет ссылку на блог, пользователь, который оценил (если он вообще их оценивает) его в форме своих ObjectId и оценки, которую они дали, т. е. +1 или -1.
Когда конкретный пользователь просматривает через блоги в порядке «сначала последние» (скажем, 40 из них на странице.Назовите их массивом от блогов[0]
до блогов[39]
) Мне нужно получить рейтинговые документы, относящиеся к этому конкретному пользователю и этим 40 блогам, если пользователь вообще их оценил и сообщите ему, какие рейтинги он дал этим блогам.
Я попытался извлечь все рейтинговые документы определенного пользователя, в которых идентификаторы объектов ссылок на блоги лежат между blogs[0]._id
и blogs[39]._id
, что возвращает пустой список. в моем случае. Возможно, нельзя сравнивать objectId с помощью запросов $lt
и $gt
. В таком случае, как мне поступить? Должен ли я перепроектировать свои схемы, чтобы они соответствовали этому сценарию?
В этом случае я использую драйвер mongoosejs. Вот соответствующие части кода, которые немного отличаются по исполнению, но вы поняли идею.
Схемы:
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}
});
Модели:
var newsm=mongoose.model('News', News);
var clientm=mongoose.model('Client', Client);
var ratesm=mongoose.model('Rates', Rates);
Логика:
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){
})
})
Редактировать: При реализации приведенной ниже схемы мне пришлось выполнить этот запрос в mongoose.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" } )
Как мне выполнить этот запрос в mongoose?