【发布时间】:2012-05-25 18:04:10
【问题描述】:
我有一个博客集合,其中包含用户给他们的标题、正文和总评分。另一个集合“评级”,其架构参考了博客,用户以他们的 ObjectId 和他们给出的评级(即 +1 或 -1)的形式对其进行评级(如果他对他们进行评级的话)。
当特定用户以“最新优先”顺序浏览博客时(例如每页 40 个。称它们为 blogs[0] 到 blogs[39] 的数组),我必须检索与该特定用户相关的评级文档以及这 40 个博客,如果用户对它们进行了评分,并通知他他对这些博客的评分。
我试图提取特定用户的所有评级文档,其中博客引用 objectIds 位于 blogs[0]._id 和 blogs[39]._id 之间,在我的情况下返回空列表。可能无法使用 $lt 和 $gt 查询比较 objectIds。在那种情况下我应该怎么做呢?我应该重新设计我的架构以适应这种情况吗?
我在这种情况下使用 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" } )
如何在猫鼬中进行此查询?
【问题讨论】:
标签: javascript node.js mongodb mongoose nosql