2015-09-21 2 views
1

Я использую meteor.js. У меня есть три сборных доски, категории, пользователи.заселить в MongoDB с метеором

Boards : 
{ 
"_id": ObjectId("su873u498i0900909sd"), 
    "locked": NumberInt(0), 
"board_name": "Legends", 
    "description": "legends of the world", 
    "cat_id": ObjectId("su873u498i0900909sd"), 
    "cost": NumberInt(1), 
"image": "1389249002691_indexhj.jpeg", 
"creator": ObjectId("52ce317994acdcee0fadc90c") 
} 

categories: 
{ 
"_id": ObjectId("su873u498i0900909sd"), 
"user_id": ObjectId("su873u498i0900909sd"), 
catname:"hjjj" 
} 

users: 
{ 
"_id":ObjectId(55acec2687fe55f12ded5b4a), 
"username" :"mariya" 
} 

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

Boards.find({_id:"ObjectId(55acec2687fe55f12ded5b4a)"},function(res){ 
    if(res){ 

categories.find({_id:res.cat_id},function(res1){ 
    if(res1){ 
    users.find({_id:res.user_id},function(res3){ 
     res.send(res3) 
    }) 

    }) 
}) 

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

+1

присоединяется не очень пока официально поддерживается, но есть некоторые пакеты вокруг, чтобы помочь нам использовать, что здесь один, например: https://atmospherejs.com/reywood/publish-composite –

+0

Спасибо Марку Uretsky. Дай мне попробовать. –

ответ

2

Возможно collection helpers.

Базовое использование:

Boards.helpers({ 
    creator: function() { 
    return Meteor.users.findOne(this.creatorId); 
    }, 
    category: function() { 
    return Categories.findOne(this.categoryId); 
    } 
}); 

Использование в шаблоне довольно просто. Допустим, у вас есть совет:

{{#each boards}} 
    <div> 
    <h3>{{board_name}}</h3> 
    <p>Created by</p>: {{ creator.username }} 
    <p>Category</p>: {{ category.catname }} 
    </div> 
{{/each}} 

Добавлен совет: использовать publish-composite опубликовать отношения в более управляемым способом.

Meteor.publishComposite('board', function (boardId) { 
    check(boardId, String); 
    return { 
    find: function() { 
     return Boards.find(boardId); 
    }, 
    children: [{ 
     find: function (board) { 
     return Meteor.users.find(board.creatorId); 
     } 
    }, { 
     find: function (board) { 
     return Categories.find(board.categoryId); 
     } 
    }] 
    } 
}); 
+0

Спасибо. Но я должен назвать это из другого приложения, которое я подключил, используя службу ddp. Как их подключить? –

+0

Я решил. Но перед другой проблемой. На вопрос о том же. Пожалуйста, помогите мне решить? http://stackoverflow.com/questions/32717394/publish-composite-with-more-than-one-nested-sub-documents-in-meteor –

Смежные вопросы