将mongodb集合查询到嵌套数组中

时间:2016-07-12 22:57:36

标签: node.js mongodb express mongoose

我有一个名为List.js的模型,如下所示:

module.exports = function(mongoose, models) {
    var collection = 'List',
        Schema = mongoose.Schema;
    var schema = new Schema({
        promotor: String,
        nombre_promotor: String,
        cod_evento: {type: Schema.Types.ObjectId, ref: 'Evento'},
        lista: [{
            nombre: String,
            cod_usuario_lider: {
                type: Schema.Types.ObjectId,
                ref: 'Usuario'
            }, 
            usuarios_agregados: [{ 
                cod_usuario: {
                    type: Schema.Types.ObjectId,
                    ref: 'Usuario'
                },
                nombre: String,
                fbid: String,
                tipo_usuario: Number
            }]
        }]
    });
    this.model = mongoose.model(collection, schema);
    return this;
}

我试图在“lista”字段中找到与cod_usuario_lider匹配的文档,以及在“lista”中的“usuarios_agregados”中找到与“cod_usuario”匹配的文档。查询的第一部分返回匹配的文档,但第二部分不返回任何内容。任何人都知道进行该查询的正确方法吗?

var codigo_buscar=req.body.codigo_buscar;
 models.List.find({
                    $or: [{
                        lista: {
                            $elemMatch: {
                                cod_usuario_lider: codigo_buscar
                            }
                        }
                    }, {
                        usuarios_agregados: {
                            $elemMatch: {
                                cod_usuario: codigo_buscar
                            }
                        }
                    }]
                })
.exec(function(err, data) {
    console.log(data);
});

查询的第一部分返回匹配的文档,但第二部分不返回任何内容。任何人都知道进行该查询的正确方法吗?

1 个答案:

答案 0 :(得分:0)

从您的文档中,看起来usuarios_agregados是lista的一个属性。在这种情况下,您必须查询如下:

var codigo_buscar=req.body.codigo_buscar;
 models.List.find({
                    $or: [{
                        lista: {
                            $elemMatch: {
                                cod_usuario_lider: codigo_buscar
                            }
                        }
                    }, {
                        lista.usuarios_agregados: {
                            $elemMatch: {
                                cod_usuario: codigo_buscar
                            }
                        }
                    }]
                })
.exec(function(err, data) {
    console.log(data);
});