Моделирование блогов и рейтингов в mongodb и nodejs

У меня есть коллекция блогов, которая содержит заголовок, тело и совокупный рейтинг, который им дали пользователи. Другая коллекция «Рейтинги» ', чья схема имеет ссылку на блог, пользователь, который оценил (если он вообще их оценивает) его в форме своих 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?

6
задан Community 22 September 2017 в 18:01
поделиться