在mongodb和nodejs中找到两个给定值之间的objectId

时间:2012-05-17 19:00:43

标签: node.js mongodb mongoose

我正在创建类似于新闻邮件的模式,用户可以选择喜欢和不喜欢它们。 以下是相同的模式

    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){
    })
})

无论如何,此查询都会返回空列表。我怀疑$ gte和$ lte是否用于比较objectIds。我对吗?如何在一组给定的新闻帖中用户喜欢/不喜欢哪些帖子?

1 个答案:

答案 0 :(得分:1)

是的,可以使用范围查询(例如$ gt / $ lt等)查询ObjectIds。您是否可以发布用于news[0]._idnews.slice(-1)[0]._id的确切值,这些值会为您提供空结果?

但是,我不确定$ gt / $ lt是你想要的。您需要做的就是提取新闻项的_id,然后在$in的查询中的ratesm过滤器中使用它。