在猫鼬中居住

时间:2014-12-19 11:36:22

标签: node.js mongodb mongoose

我需要一些帮助,用mongoose填充子文档,我在互联网上搜索了很多,但没有办法解决我的问题。

我有两个架构: 1 - InfraServer

  var InfraServerSchema = new Schema({
    _id : String,
    equipe : String,
    servidor : String,
    memoria : String,
    processador : String,
    modelo : String,
    so : String,
    usuario : String
},{ collection: 'infraserver' });

var InfraServer = mongoose.model('InfraServer', InfraServerSchema);
module.exports = InfraServer;

2 - InfraDataBase

var InfraDataBaseSchema = new Schema({
    _id : String,
    equipe : String,
    nome_base : String,
    vipname : String,
    tipo_banco : String,
    versao: String,
    servidores :  [{ type : mongoose.Schema.Types.ObjectId, ref: 'InfraServer' }],
    tnsnames : String
},{ collection: 'infradatabase' });

var InfraDataBase = mongoose.model('InfraDataBase', InfraDataBaseSchema);
module.exports = InfraDataBase;

我正在尝试在routes文件夹中填充如下所示的数组servidores,但是当我打印种子变量时,数组返回空,并且需要servidores.servidor(InfraServer中的字段),servidores._id正确填充。

InfraDataBase.find().where('equipe').in(req.session.userInf.equipe).populate('servidores').exec(function(err, seeds){

  if( err || !seeds) console.log("No seeds found");
          else 
        {
            console.log("--->>> " + seeds);

  }

可以帮我找到解决此问题的方法。

Tks

2 个答案:

答案 0 :(得分:3)

尝试将_id的SchemaType更改为ObjectId。

_id : ObjectId

此外,您不需要明确声明_id字段。它是为所有Mongoose模式自动创建的。

答案 1 :(得分:2)

首先应用查找查询,然后像这段代码片段一样应用填充

 InfraDataBase.find({equipe:{$in:[req.session.userInf.equipe]}},function(err,docs){

    docs.populate('servidores').exec(function(err, seeds){

      if( err || !seeds) console.log("No seeds found");
              else 
            {
                console.log("--->>> " + seeds);

      }

    })