我有一個博客集合,其中包含用戶給他們的標題,主體和集合評級。另一個「評分」集合的模式參考了博客,用戶評價(如果他根本評價他們的話)它以ObjectIds的形式和他們給出的評分即+1,-1。在mongodb和nodejs中建模博客和評分
當特定用戶瀏覽的「最新第一」爲了部落格(說每頁他們的40。打電話給他們的blogs[0]
到blogs[39]
數組)我需要檢索與此相關的特定的用戶和那些40評級文件如果在所有的用戶評價他們,並通知他他給了這些博客什麼等級的博客。
我試圖提取一個特定用戶的所有評級文件,其中博客參考對象ID位於blogs[0]._id
和blogs[39]._id
之間,在我的情況下它返回空列表。可能是objectIds不能使用$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){
})
})
編輯: 儘管實現了低於所述的模式,我在貓鼬做到這一點查詢。 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" })
如何在貓鼬中執行此查詢?
好的。我按照你的說法改變了我的模式,但我仍然對如何獲得用戶給定的給定博客集的評分有問題。你能幫我關於具體的api嗎? @Brandon –
如果有一個項目有數百萬的價格怎麼辦?這種模式是否存在問題? – Burak