2014-12-19 2 views
1

Мне нужна помощь, чтобы заполнить суб-документ с помощью мангуста, я много искал в Интернете, но не нашел способ исправить мою проблему.Заселить в Mongoose

Я heve две схемы: 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; 

Я пытаюсь заполнить 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

ответ

3

Попробуйте изменить тип схемы _id на ObjectId.

_id : ObjectId 

Кроме того, вам не нужно явно указывать поле _id. Он автоматически создается для всех схем Mongoose.

+0

Tks за помощью, теперь у меня есть возврат к заполнению servidores. Tks для справки – Cauca

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); 

     } 

    }) 
+0

Tks за помощь снова, но тоже не работала. Я получил ошибку: 'servidores: [544a246ca6492c492d000007]} не имеет метода 'populate'' – Cauca

1

возвращать ли она какие-либо значения без Население? Может быть, проблема не в том, чтобы заселить?

+0

Да, верните эти значения:' {equipe : 'БИ', nome_base: 'хххх', vipname: 'ххххх', tipo_banco: 'Oracle', versao: '10', __v: 0, _id: '544a4ef241586c826100000a', Servidores: [544a4ed041586c8261000009 ]}, { Equipe: 'БИ', nome_base: 'БАЗА TESTE', vipname: '', tipo_banco: '', versao: '', TNSNAMES: '', __v: 0, _id: '54a2d9c64d0486d51d000007', servidores: [544a246ca6492c492d000007]} ' – Cauca

+0

Как вы нажимаете эти« servidores »в модель« InfraDataBase »? Это может быть проблема типа, потому что я думаю, что идентификаторы должны быть указаны, например. _servidores: ["544a246ca6492c492d000007"] _. – cdagli

+0

В моей коллекции эти данные '{ "Equipe": "XXX", "nome_base": "ххх", "vipname": "XXXX", "tipo_banco": "Oracle", "versao": "10", "TNSNAMES": "ХХХХХ", "Servidores": [ ObjectId ("544a49a87d747b1a4f000008") ], "__v": 0, "_id": ObjectId ("544a522d41586c826100000b") } ' Я сохранил данные как тип ObjectId – Cauca