下面是我的模式。
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":[]
]
}
我试图按名称查询stepSchema的子文档(_prayer)和stepSchema的stepNumber中存在的名称。
Step.find({_prayer :{ name: req.query.name} }, {stepNumber: 1});
Step.find({'_prayer.name' : req.query.name, stepNumber: 1});
以上两个代码均无效。 我发现的一种方法是先按名称查询 Prayer 文档,然后获取其_id,然后通过找到的_id和stepNumber再次查询 Step 文档。
Prayer.findOne({name:"name"})
.exec((err, prayers) => {
Rakah.find({ _prayer: prayers._id, stepNumber: stepNumber })
....
});
但是这种方法对于嵌套文档将变得困难。 有什么方法可以只查询一个文档以获得结果吗?
答案 0 :(得分:1)
两个过滤条件都应包含在find的一个对象中,如下所示:
Step.find({'_prayer.name' : req.query.name, stepNumber: 1 })
第二个参数代表投影部分,因此您仅获得_id
和stepNumber
(1
意味着结果中应包含该字段)