大家好我试图使用过滤器查找特定数据,但我不知道我们如何设置或使用过滤器及其属性。我存储得分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);
}
}
});
}
答案 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);
}
}
});
}
编辑:代码编辑