Почему этот метод заполнения MongooseDB не работает? - PullRequest
0 голосов
/ 06 мая 2018

Я хотел создать базу данных для комбинаций MTG и сделать что-то очень простое, например, используя Mongoose и MLab: у нас есть две схемы, Combo и Card, и два экземпляра модели Card, связанные с экземпляром модели Combo. , Когда я пытаюсь заполнить комбинации карт названием такой комбинации, она не работает, и вместо имени отображается идентификатор.

var mongoose = require('mongoose') ;
mongoose.connect('mongodb://wernerbusch:xxxx!h@ds115340.mlab.com:15340/wernercito');
var Schema = mongoose.Schema;

var comboSchema = new Schema({
    name : String,
    cards : [{type: Schema.Types.ObjectId, ref:'Card'}],
    type : ["infinite mana", "infinite damage", "draw library", "lethal damage", "storm", "graveyard"]
});

var cardSchema = new Schema({
    name: String,
    colour:["U","R","B","W","G","C"],
    combos: [{type:Schema.Types.ObjectId, ref: 'Combo'}]
})

var Combo = mongoose.model("Combo",comboSchema);
var Card = mongoose.model("Card",cardSchema);

var PanderBurst = new Combo({
    name:"PanderBurst",
    type:'lethal damage'
})

PanderBurst.save(function(err){
    if (err) console.log( err)

    var SaprolingBurst = new Card({
        name: "Saproling Burst", 
        colour:["G", "R"],
        combos : PanderBurst._id
    })

    var Pandemonium = new Card({
        name: "Pandemonium",
        colour:["R"],
        combos: PanderBurst._id
    })

    SaprolingBurst.save(function(err){
        if (err) console.log( err)
    });

    Pandemonium.save(function(err){
        if (err) console.log( err)
    })
});

Card.find().populate('combos', 'name').exec(function(err,cards){
    if (err) console.log (err);
})

После выполнения этого кода в карточных документах ничего не меняется.

1 Ответ

0 голосов
/ 06 мая 2018

Вы пробовали:

 Card.find().populate({path: "comboes", select: "name"})
                      .exec((err,cards)=>{
                               if (err) console.log (err);
                               console.log(cards);
                            });

Использование объекта всегда работало для меня.

Обновление: у вас также есть:

comboes: {type:Schema.Types.ObjectId, ref: 'Combo'}

в вашей схеме и combos в вашем населении. Окончательное обновление: Заполнить используется, когда вы делаете запрос. Заполнение схемы во время создания не является хорошей практикой, потому что это вызывает дублирование, поэтому вызывайте заполнять каждый запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...