How to access elements inside a collection?


#1

I have a collection which is defined as follows:

Posts.insert({
                name: Meteor.user().profile.name,
                id: Meteor.userId,
                email: Meteor.user().services.google.email,
                image: Meteor.user().services.google.picture,
                title: titleVar,
                body: bodyVar,
                description: describeit,
                date: new Date(),
           


            });

Now, at some other point, I want to know the title of the post, by the loggedI user.

I have used Posts.find({id:Meteor.userId()}).fetch().title, but it returns undefined. Is there any other way?


#2

When inserting the post, you need:

id: Meteor.userId(),

not

id: Meteor.userId,

(The missing parentheses mean the function isn’t called so the id value in the db will be undefined.)


#3

Fetch returns an array, so you would have to say Posts.find({id:Meteor.userId()}).fetch()[0].title, which would fail if your find didn’t return anything. Also, it would only yield the title of the first post.

Another way would be Posts.findOne({id:Meteor.userId()}).title which would also fail if the user didn’t have a post.


#4

I guess a complete solution (at least for rendering a list of posts by a single user) would be:

HTML

<template name="userPostsList">
  <ul>
    {{#each postsByCurrentUser}}
      <li>{{title}}</li>
    {{/each}}
  </ul>
</template>

JS

Template.userPostsList.helpers({
  postsByCurrentUser : function () {
    return Posts.find({id: Meteor.userId()});
  }
});

For just getting an array of titles:

var userPostTitles = Posts.find({id: Meteor.userId()}).map(function (post) {
  return post.title;
});