Ниже моя схема.
var prayerSchema = new Schema({
totalSteps:{
type: Number
},
name: String,
steps: [{type: Schema.Types.ObjectId, ref:'Step'}]
});
var stepSchema = new Schema({
stepNumber : {
type: Number
},
_prayer : {
type: Schema.Types.ObjectId, ref: 'Prayer', required: true
}
});
Каждая молитва будет иметь общие шаги, имя и шаги.
С каждым шагом будет связано stepNumber и молитвенная модель.
Шаг документ будет выглядеть так:
{
"stepNumber":1,
_prayer:[
"name":"prayer1",
"totalSteps":5,
"steps":[]
]
},
{
"stepNumber":2,
_prayer:[
"name":"prayer2",
"totalSteps":10,
"steps":[]
]
}
Я пытаюсь выполнить запрос по имени, существующему в поддокументе (_prayer) stepSchema и stepNumber из stepSchema.
Step.find({_prayer :{ name: req.query.name} }, {stepNumber: 1});
Step.find({'_prayer.name' : req.query.name, stepNumber: 1});
Оба приведенных выше кода не работают.
Один из найденных способов - сначала запросить документ Молитва по его имени, получить его _id и снова запросить Шаг документ по найденным _id и stepNumber.
Prayer.findOne({name:"name"})
.exec((err, prayers) => {
Rakah.find({ _prayer: prayers._id, stepNumber: stepNumber })
....
});
Но такой подход станет сложным для вложенных документов.
Есть ли способы сделать запрос по одному документу только для получения результата?