Tôi có một bộ sưu tập blog chứa tiêu đề, nội dung và xếp hạng tổng hợp mà người dùng đã cung cấp cho họ. Một bộ sưu tập 'Xếp hạng' khác có lược đồ có liên quan đến blog, người dùng đã xếp hạng (nếu anh ấy xếp hạng) nó dưới dạng ObjectIds của họ và xếp hạng họ đã đưa ra tức là., +1 hoặc -1.Lập mô hình các blog và xếp hạng trong mongodb và nodejs
Khi một người dùng cụ thể duyệt qua các blog theo thứ tự 'mới nhất đầu tiên' (nói 40 trong số đó mỗi trang. Gọi cho họ một mảng của blogs[0]
-blogs[39]
) Tôi có để lấy tài liệu giá liên quan đến người dùng cụ thể này và những người 40 blog nếu ở tất cả người dùng đã xếp hạng và thông báo cho anh ấy về xếp hạng anh ấy đã cung cấp cho các blog đó.
Tôi cố gắng để trích xuất tất cả các văn bản đánh giá của một người dùng cụ thể, trong đó objectIds viết blog tham khảo nằm giữa blogs[0]._id
và blogs[39]._id
trả về danh sách sản phẩm nào trong trường hợp của tôi. Có thể không thể so sánh đối tượng bằng cách sử dụng các truy vấn $lt
và $gt
. Trong trường hợp đó làm thế nào tôi nên đi về nó? Tôi có nên thiết kế lại các lược đồ của mình để phù hợp với kịch bản này không?
Tôi đang sử dụng trình điều khiển mongoosejs cho trường hợp này. Dưới đây là các phần liên quan của mã khác nhau một chút trong thực thi nhưng bạn sẽ có được ý tưởng.
Schemas:
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}
});
mô hình:
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: Trong khi thực hiện dưới đây nói schema, tôi đã phải làm truy vấn này trong cầy mangut. 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" })
Làm cách nào để thực hiện truy vấn này trong mongoose?
ok. Tôi đã thay đổi các lược đồ của tôi như bạn đã nói nhưng tôi vẫn gặp vấn đề về cách tôi nhận được xếp hạng do người dùng đưa ra cho một tập hợp blog đã cho. Bạn có thể vui lòng giúp tôi về api cụ thể không? @Brandon –
Điều gì xảy ra nếu có hàng triệu tỷ giá cho một mặt hàng? Đây có phải là vấn đề đối với loại lược đồ đó không? – Burak