想象一下以下场景:
var Almoxarifado = new Schema({
descricao: {
type: String
},
movimentacoes: [ Movimentacao ]
});
var Movimentacao = new Schema({
requisitante: {
type: Schema.Types.ObjectId,
ref: 'Requisitante'
},
observacao: {
type: String
}
});
var Requisitante = new Schema({
nome: {
type: String
}
});
典型的
Almoxarifado.find({ _id: 1 }).populate('movimentacoes.fornecedor').exec();
会导致:
{
"_id" : 1,
"descricao" : "ALMOXARIFADO 1",
"movimentacoes" : [
{
"fornecedor" :
{
"_id": 4,
"nome": "Arthur Silva"
}
},
{
"fornecedor" :
{
"_id": 5,
"nome": "Laura Guillioto"
}
},
{
"fornecedor" :
{
"_id": 6,
"nome": "Arthur Simons"
}
}
]
}
现在如果我想要过滤数组'movimentacoes'的特定'almoxarifado',例如:
我想执行一个具有以下条件的'find':'almoxarifado._id'= 1,'movimentacoes.fornecedor.nome'就像'Arthur S'。预期的回应是:
{
"_id" : 1,
"descricao" : "ALMOXARIFADO 1",
"movimentacoes" : [
{
"fornecedor" :
{
"_id": 4,
"nome": "Arthur Silva"
}
},
{
"fornecedor" :
{
"_id": 6,
"nome": "Arthur Simons"
}
}
]
}
我不能使用聚合,因为我需要填充字段'movimentacoes.fornecedor'而我的mongodb版本是3.0,所以我无法使用$ lookup。
其他信息:
注意Movimentacao在Almoxarifado中嵌入,而Requisitante在Movimentacao中是参考。
Obs。:找到的解决方案here不适合我,因为返回的数组很大(10k +项)并且无法在内存中过滤。
问题
如何使用mongoose Model.find()通过填充数据过滤子集中的特定文档?