2016-09-11 2 views
0

Я очень новичок в MongoDB и использую Mongoose.Сохранение отношений «один ко многим» в Mongoose с обеих сторон

У меня есть две модели: users и recipes.

User:

recipes: [{ 
    type: Schema.Types.ObjectId, 
    ref: 'recipes' 
}], 

Recipe:

_creator: { 
    type: Schema.Types.ObjectId, 
    ref: 'User', 
    childPath: "recipes" 
}, 

Когда я пытаюсь сохранить рецепт и я назначить пользователю рецепт:

var recipe = new models.Recipe({ 
     title: req.body.title, 
     slug: req.body.slug, 
     _creator: user._id 
    }); 

    recipe.save(); 

Рецепт сохранялось только штраф (, хотя я не могу сделать рецепт ._creator.name, чтобы получить имя пользователя из рецепта). Но если я попытаюсь получить детали пользователя, массив recipes пуст. Я ожидал бы, что он был заполнен вновь созданной ссылкой на рецепт. Почему нет?

+0

_I я не в состоянии сделать 'recipe._creator.name'_ вы должны быть в состоянии, во всяком случае базы данных NoSQL не использовать отношения, это более вложенными документами, безусловно, вы иметь лучший способ писать модели –

+0

Я установил свои модели так же, как описано на этой странице mongoose http://mongoosejs.com/docs/populate.html, но я не совсем понимаю, как их сохранить таким образом, чтобы я могу получить доступ к "отношения" с обеих сторон –

ответ

0

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

если вы внимательно изучить в рецептах вы делаете реф на себя

{ recipes: [{ 
    type: Schema.Types.ObjectId, 
    ref: 'recipes' 
}], 

} 

вместо рецептов вы должны сделать

{ 
    { recipes: [{ 
     type: Schema.Types.ObjectId, 
     ref: 'user' 
    }], 
} 

почему в вашей модели пользователя у вас есть ссылка на сам пользователь? что кажется неправильным.

проверка для примера я отправил на Mongodb and Express

+0

Спасибо за ответ, но ваш пример: 'вар personSchema = Schema ({ _id: Number, имя: String, возраст : Number, рассказы: [{type: Schema.Types.ObjectId, ref: 'Story'}] }); ' точно так же, как у меня, это просто, а не истории, у меня есть рецепты, которые ссылаются на рецепт schema :) –

+0

Вы сохраняете объект пользователя перед сохранением рецепта? –