Я настроил базу данных следующим образом:
const listSchema = new mongoose.Schema({
name: {
type: String,
required: true,
trim: true
},
additionalInfo: {
type: String,
required: false
},
author: {
required: true,
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
})
listSchema.virtual('vocs', {
ref: 'Voc',
localField: '_id',
foreignField: 'list'
})
var List = mongoose.model('List', listSchema);
module.exports = List;
const vocSchema = new mongoose.Schema({
foreignLanguage: {
type: String,
required: true,
trim: true
},
translationGerman: {
type: String,
required: true,
trim: true
},
translationForeignLanguage: {
type: String,
required: true
},
difficulty: {
type: Number,
required: true
},
list: {
required: true,
type: mongoose.Schema.Types.ObjectId,
ref: 'List'
}
})
var Voc = mongoose.model('Voc', vocSchema);
module.exports = Voc;
Теперь я хочу сделать следующее: я хочу выбрать все списки с определенным автором, затемдотянуться до вокала и отфильтровать эти вокалы с помощью translationGerman и translationForeignLanguage: я хочу выбрать все воки по всем спискам, которые имеют определенное значение (скажем, слово «яблоко» в «translationGerman» или «translationForeignLanguage»). Я пробовалследующий код:
router.get('/api/filterAllWords/:wordname', auth, async (req, res) => {
try {
// const words = await Voc.find({$or:[{translationForeignLanguage: req.params.wordname},{translationGerman: req.params.wordname}]});
// console.log(words);
// res.send(words)
const lists = await List.find({author: req.user._id});
let allVocs = [];
for (let i = 0; i < lists.length; i++) {
const singleListVocs = await lists[i].populate(
{path: "vocs",
match: {
{$or:[{translationForeignLanguage: req.params.wordname},{translationGerman: req.params.wordname}]}
}}).execPopulate();
for(let i = 0; i < singleListVocs.vocs.length; i++) {
allVocs.push(singleListVocs.vocs[i])
}
}
res.send(allVocs)
}
catch {
res.status(404).send({status: 'No vocs found'});
}
})
Когда я пытаюсь проверить код, он выдает мне сообщение «Неожиданный токен». Я неправильно использую $ или внутреннее заполнение (совпадение). Когда я пытаюсь повторить этокод просто "translationForeignLanguage: req.params.wordname" как match-Parameter, все в порядке и отлично работает!
Спасибо за вашу помощь!
Юлия