나는 무작위 시험을 생성하는 질문 목록을 유지하는 간단한 응용 프로그램을 작성하고 있습니다. 나는이 스키마를 정의 :몽구스 (nodejs)에서 임의로 필터링 된 값 가져 오기
질문 스키마 :
var questionSchema = mongoose.Schema({
text: String,
type: {
type: String,
enum: ['multichoice', 'numerical', 'truefalse']
},
meta: {
votes: {
type: Number,
default: 0
},
tags: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'tag'
}]
}
});
태그 스키마 : 난 할 노력하고있어하는 임의의 질문을 얻는 것입니다
var tagSchema = mongoose.Schema({
name: {
type: String,
unique: true
}
});
(내가 사용 몽구스 랜덤) 태그로 필터링하고 여기에 문제가 있습니다. 내 get 라우트는 쉼표로 구분 된 태그 이름 목록을받습니다. 해당 태그 이름이 포함되어 있는지 질문에 어떻게 필터링합니까? 현재 질문에는 태그 ID 목록 만 포함되어 있으며이를 수행 할 방법이 없습니다. 이 지금이 순간
무작위로 질문을 가져 오는 데 사용되는 코드입니다 :Question.findRandom().limit(req.query.maxquestions).exec(function (err, questions) {
if (err) {
res.send(err);
} else {
res.set('Content-Type', 'text/json');
res.json(questions);
}
});
편집 :이 내가 필터를 변경하려고
router.get('/exam', function(req, res) {
var tags = req.query.tags.split(",");
var tagsIds;
var tagsProcessed = 0;
var eventEmitter = new events.EventEmitter();
eventEmitter.on('tagProcessed', function() {
tagsProcessed++;
if (tagsProcessed >= tags.length) {
switch (req.query.format) {
case "json":
case "xml":
break;
case "html":
default:
if (req.isAuthenticated()) {
console.log(tagsIds);
Question.findRandom({'meta.$.tags': {$in: tagsIds}}).limit(req.query.questions).exec(function (err, questions) {
if (err) {
res.send(err);
} else {
res.set('Content-Type', 'text/html');
res.render('exam', {
title: 'Smarty',
user: req.user,
questions: questions,
});
}
});
} else {
res.redirect('/');
}
}
}
});
if (tags.length > 0) {
for (var i = 0; i < tags.length; i++) {
Tag.find({name: tags[i]}, function(err, tag) {
tagsIds.push(tag);
eventEmitter.emit('tagProcessed');
});
}
} else {
eventEmitter.emit('tagProcessed');
}
});
문제를 해결하기 위해 내 실제 코드 ~ :
Question.findRandom({'meta.$.tags': {$in: tagsIds}}).limit(req.query.questions).exec(function (err, questions) {
그러나 나는 t, {} 만 표시되는 오류 (메시지 없음).
편집 2 : 내 태그 ID 목록에 문제가 있습니다. 나는 또한 필터를 { 'meta.tags': {$ in : tagsIds}}로 바꾸었지만 지금은 효과가 있지만 약간 문제가 있습니다. 태그 foo 및 bar에 대한 질문이 있고 태그 foo로 요청을 보내면이 질문은 반환되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
편집 3 : 잘못된 값을 저장하고있었습니다. 제안 된 솔루션이 필터 수정과 함께 작동합니다.
이미 모든 te 태그 ID가 있지만 질문을 필터링하려면 어떻게해야합니까? 매개 변수로 수신 된 태그 목록의 태그 하나를 사용하여 질문을 찾는 방법은 무엇입니까? –
답변을 업데이트했습니다. 확인하고 업데이트하십시오. –
나는 그것을 시도해야하지만 이해가된다. 그것은 훌륭한 대답이고 나는 그것이 작동하도록 한 후에 그것을 받아 들일 것입니다. 당신보다 훨씬 당신의 도움이 필요합니다. –