查找特定文档并返回由填充数据过滤的子阵列

时间:2016-04-06 22:01:06

标签: node.js mongodb mongoose mongoose-populate

想象一下以下场景:

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。

其他信息:

  • “mongoose”:“〜4.2.3”
  • “mongodb”:“3.0.0”

注意Movimentacao在Almoxarifado中嵌入,而Requisitante在Movimentacao中是参考

Obs。:找到的解决方案here不适合我,因为返回的数组很大(10k +项)并且无法在内存中过滤。

问题

如何使用mongoose Model.find()通过填充数据过滤子集中的特定文档?

0 个答案:

没有答案