Население мангуста работает не так, как ожидалось - PullRequest
0 голосов
/ 27 августа 2018

Я очень новичок в использовании mongoose и выполнил простую работу с БД на mongodb.

Видя мой случай использования, я нашел этот способ сделать это в mongodb, используя mongoose. Однако я не получаю ожидаемого результата, как показано в учебниках.

Мои схемы

var EventsSchema = new mongoose.Schema({
    root: {type: mongoose.Schema.Types.ObjectId, ref: 'root'},
    voting: [{type: mongoose.Schema.Types.ObjectId, ref: 'Voting'}]
});

var VotingSchema = new mongoose.Schema({
    events: {type: mongoose.Schema.Types.ObjectId, ref: 'Events'},
    title: {
        type: String,
        required: true
    }
})

var Events = mongoose.model('Events', EventsSchema, 'event');
var Voting = mongoose.model('Voting', VotingSchema, 'voting');

Первоначально у меня есть эти две схемы. Я хочу создать событие голосования. Когда создается событие голосования, тогда в voting schema идентификатор события должен сохраняться в соответствии с предложением, и я хочу, чтобы ссылка на событие голосования сохранялась в EventSchema.

var events = new Events({});
events.save()
.then((events) => {
    var voting = new Voting({ events: events._id, title: "Test Title" });
    voting.save()
    .then((voting) => {
        Voting.findOne({title: 'Test Title'})
        .populate('events')
        .exec(function(err, voting){
            console.log(voting, err);
            if(err) res.sendStatus(401).send();
            else res.sendStatus(200).send();
        })

    })
    .catch((e) => {
        res.sendStatus(401).send();
    });
})
.catch((e) => {
    res.sendStatus(401).send();
})

На консоли я получаю

{ 
    _id: 5b83eca82a3cfb1dec21ddc9,
    events: { voting: [], _id: 5b83eca82a3cfb1dec21ddc8, __v: 0 },
    title: 'Test Title',
    __v: 0 
}

Мой MongoDB выглядит так

голосование

{
    "_id" : ObjectId("5b83eca82a3cfb1dec21ddc9"),
    "events" : ObjectId("5b83eca82a3cfb1dec21ddc8"),
    "title" : "Test Title",
    "__v" : 0
}

События

{
    "_id" : ObjectId("5b83eca82a3cfb1dec21ddc8"),
    "voting" : [],
    "__v" : 0
}

Я не уверен, как будет выглядеть мой mongodb. Но после попытки кода один раз он выглядит как выше.

Я, должно быть, делаю что-то не так или упускаю что-то важное. Но этот код есть и в документации. ссылка на документ . Помогите мне разобраться в этом вопросе.

Спасибо

1 Ответ

0 голосов
/ 27 августа 2018

Массив ObjIds должен быть определен следующим образом в схеме:

var EventsSchema = new mongoose.Schema({
    root: {type: mongoose.Schema.Types.ObjectId, ref: 'root'},
    voting: {type: [mongoose.Schema.Types.ObjectId], ref: 'Voting'}//**array bracers** 
});

Также вызов населения для поля типа массив, такого как корневое поле, вернет пустой массив в res API, см. Запрос на mongoose.set('debug', true); вы заметите, что mongoose ищет в модели событий не root.

хотя вы должны указать мангусту в методе популяции, какую модель использовать, чтобы заставить население работать, если только вы не укажете мангусте, в какой модели искать.

populate({path:'vooting',model:'vooting'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...