使用节点js在mongodb中过滤

时间:2016-08-10 07:57:10

标签: javascript node.js mongodb

大家好我试图使用过滤器查找特定数据,但我不知道我们如何设置或使用过滤器及其属性。我存储得分1为真,0为假。我想在下次打电话给问题时过滤关于分数的问题。所以第0个id问题将显示在浏览器上,而不是一个

1)。这是我的架构,我存储每个问题的问题ID,分数和时间

  child:{
      quiz: 

          questionId:{type:String},
          score:{type:Number},
          time:{type:String}
        }
   }

2)。这是问题架构

     _id:{type:String},
     question:{type:String},
     answer:{type:String}

3)。这是我的节点js代码用于获取和设置过滤器 实际上我没有理解我们如何设置过滤器,以便下次我调用API时,我的浏览器上只会显示0号得分ID问题,而不是1

   var childinfo = require('../models/child.js');
   var childquestion = require('../models/question.js');

   this.filter = function(req, res, next){

    async.waterfall({
        function(callback){
            try{
                var query = {child.quiz.score:1};
                var projection = '';
                childinfo.find(query,function(err,data){
                    if(err) return next(err);
                    callback(null, data)
                });
            }
            catch(err){
                console.log(err);
                return next(err);
            }
        },
        function(callback, data){
            try{
                var childq = new childquestion();
                var query = {data.child.quiz.questionId === childq._id};
                var projection = '';
                childquestion.filter(query,projection)
                    .skip()
                    .exec(function(err,data){
                    if (err) return next(err);
                    res.send(data);
                });                        
                }        
            catch(err){
                console.log('Error While Saving the result ' +err);
                return next(err); 
            }
        } 
       });
     } 

1 个答案:

答案 0 :(得分:0)

mongodb中嵌套字段的查询可以这样写:

childinfo.find({"child.quiz.score": 1},function(err,data){ .. })

您应引用字段并使用:而不是==。 所以你的代码应该是:

   var childinfo = require('../models/child.js');
   var childquestion = require('../models/question.js');

   this.filter = function(req, res, next){

async.waterfall({
    function(callback){
        try{
            var query = { "child.quiz.score" : 1 };
            var projection = '';
            childinfo.find(query,function(err,data){
                if(err) return next(err);
                callback(null, data)
            });
        }
        catch(err){
            console.log(err);
            return next(err);
        }
    },
    function(callback, data){
        try{
            var childq = new childquestion();
            var query = {"data.child.quiz.questionId":childq._id};
            var projection = '';
            childquestion.find(query,projection)
                .skip()
                .exec(function(err,data){
                if (err) return next(err);
                res.send(data);
            });                        
            }        
        catch(err){
            console.log('Error While Saving the result ' +err);
            return next(err); 
        }
    } 
   });
 } 

编辑:代码编辑