मेरे पास एक ब्लॉग संग्रह है जिसमें शीर्षक, शरीर और एग्रीगेट रेटिंग शामिल है जो उपयोगकर्ताओं ने उन्हें दी है। एक और संग्रह 'रेटिंग' जिसका स्कीमा ब्लॉग का संदर्भ लेता है, उपयोगकर्ता जिसने रेट किया है (यदि वह बिल्कुल उन्हें रेट करता है) तो यह उनके ऑब्जेक्ट आईडी के रूप में और रेटिंग जो उन्होंने दिया है, +1 या -1।mongodb और nodejs में ब्लॉगिंग और रेटिंग मॉडलिंग
एक विशेष उपयोगकर्ता की नवीनतम पहले 'क्रम में ब्लॉग के माध्यम ब्राउज़ करता है (प्रति पृष्ठ उनमें से 40 का कहना है। उन्हें blogs[0]
blogs[39]
करने की एक सरणी कॉल) मैं इस विशेष उपयोगकर्ता और उन 40 से संबंधित रेटिंग दस्तावेजों को पुनः प्राप्त करने के लिए है ब्लॉग अगर सभी उपयोगकर्ताओं ने उन्हें रेट किया है और उन्हें सूचित किया है कि उन्होंने उन ब्लॉगों को क्या रेटिंग दी है।
मैंने किसी विशेष उपयोगकर्ता के सभी रेटिंग दस्तावेज़ निकालने का प्रयास किया जिसमें ब्लॉग संदर्भ ऑब्जेक्ट आईडी blogs[0]._id
और blogs[39]._id
के बीच है जो मेरे मामले में खाली सूची देता है। ऑब्जेक्ट हो सकता है आईडी $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){
})
})
संपादित करें: को लागू करते समय नीचे कहा स्कीमा, मैं नेवला में इस क्वेरी करना था। जेएस
> 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 में कैसे करूं?
ठीक है। मैंने आपके स्कीमा को बदल दिया जैसा आपने कहा था लेकिन मुझे अभी भी समस्या है कि मुझे किसी दिए गए ब्लॉग सेट के लिए उपयोगकर्ता द्वारा दी गई रेटिंग कैसे प्राप्त होती है। क्या आप कृपया विशिष्ट एपीआई के बारे में भी मेरी मदद कर सकते हैं? @ ब्रैंडन –
क्या होगा यदि किसी आइटम के लिए लाखों दरें हैं? क्या यह उस तरह की स्कीमा के लिए एक समस्या है? – Burak