<div dir="ltr">Gentlemen, I can't thank you enough.<div><br></div><div>Its all working perfectly :)</div><div><br></div><div>Hope I can help some others to start learning this neat framework too!</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Best Regards,<br><br>Gavin Colborne<br><br>Managing Director,<br><br>Tele:     0207 193 2014<br>Mobile: 0788 400 4339<br>Skype: gavincolborne<br>Visit: <a href="http://www.littleforest.co.uk/" target="_blank">www.littleforest.co.uk</a><br></div><div dir="ltr"><br></div><div dir="ltr"><a href="http://www.littleforest.co.uk/" style="font-family:"Times New Roman";font-size:medium" target="_blank"><img src="http://www.littleforest.co.uk/wp-content/uploads/2017/02/1.jpg" alt="Little Forest LFi"></a><br></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On 19 October 2017 at 18:23, Chad Wallace <span dir="ltr"><<a href="mailto:cwallace@lodgingcompany.com" target="_blank">cwallace@lodgingcompany.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, 19 Oct 2017 07:22:46 +0100<br>
Gavin Colborne <<a href="mailto:gavin@littleforest.co.uk">gavin@littleforest.co.uk</a>> wrote:<br>
<br>
> Thanks Richard and everyone,<br>
><br>
> I added the ".item" so my view shows: [% entries.$id.item('time') %] I<br>
> still don't see any results :(<br>
><br>
> I now see in my terminal the following: Argument "client" isn't<br>
> numeric in numeric comparison (<=>)<br>
> Which from what I can tell from Gabor's great site<br>
> <a href="https://perlmaven.com/argument-isnt-numeric-in-numeric" rel="noreferrer" target="_blank">https://perlmaven.com/<wbr>argument-isnt-numeric-in-<wbr>numeric</a> is some numeric<br>
> operation problem.<br>
<br>
That's because you're using "entries.keys.nsort".  If you change that to<br>
"entries.keys.sort" you won't get the warning.  If "client" is a key,<br>
you don't want a numeric sort.<br>
<br>
> Do you have any examples of controllers passing Mongo data to views<br>
> so I can compare?<br>
<br>
The "$docs->find()" call returns a cursor object.  You can read about<br>
that in the MongoDB::Cursor man page.  The last thing you want to do<br>
is iterate over its keys.<br>
<br>
If you use the "all" method on the cursor, it'll return an array of<br>
documents.  So your "entries" key in the template vars hash could be<br>
done like this:<br>
<br>
    template '<a href="http://show_mongo.tt" rel="noreferrer" target="_blank">show_mongo.tt</a>', {<br>
        'entries' => $all_docs = [ $docs->find()->all ],<br>
    };<br>
<br>
And then in the view:<br>
<br>
    [% FOREACH doc IN entries %]<br>
        [% doc.time %]<br>
    [% END %]<br>
<br>
<br>
Another way to do it would be to use the cursor directly in the<br>
template (in case you have a humongous dataset).  So your controller<br>
would pass the cursor to the template like this:<br>
<br>
    template '<a href="http://show_mongo.tt" rel="noreferrer" target="_blank">show_mongo.tt</a>', {<br>
        'cursor' => $docs->find(),<br>
    };<br>
<br>
and in the view:<br>
<br>
    [% WHILE cursor.has_next;<br>
        SET doc = cursor.next %]<br>
        [% doc.time %]<br>
    [% END %]<br>
<br>
Then you don't need to store the entire dataset in memory.  You'll only<br>
look at one document at a time.<br>
<br>
<br>
<br>
> My code so far - perhaps the controller is the issue?<br>
><br>
> sub connect_mongo {<br>
>     my $client = MongoDB->connect('mongodb://a.<wbr>b.c.d') or die "Error<br>
> connecting to Mongo";<br>
> my $db = $client->get_database( 'lfi-perl' );<br>
> return($db);<br>
> }<br>
><br>
> get '/mongo' => sub {<br>
>     my $db = connect_mongo();<br>
> my $docs = $db->get_collection( 'Test-Collection' );<br>
> my $all_docs;<br>
>      template '<a href="http://show_mongo.tt" rel="noreferrer" target="_blank">show_mongo.tt</a>', {<br>
>          'entries' => $all_docs = $docs->find(),<br>
>      };<br>
> };<br>
><br>
><br>
> Appreciate your help,<br>
><br>
> Gavin<br>
><br>
><br>
><br>
> Best Regards,<br>
><br>
> Gavin Colborne<br>
><br>
> Managing Director,<br>
><br>
> Tele:     0207 193 2014<br>
> Mobile: 0788 400 4339<br>
> Skype: gavincolborne<br>
> Visit: <a href="http://www.littleforest.co.uk" rel="noreferrer" target="_blank">www.littleforest.co.uk</a><br>
><br>
> [image: Little Forest LFi] <<a href="http://www.littleforest.co.uk/" rel="noreferrer" target="_blank">http://www.littleforest.co.<wbr>uk/</a>><br>
><br>
> On 18 October 2017 at 10:13, Richard Jones <<a href="mailto:ra.jones@dpw.clara.co.uk">ra.jones@dpw.clara.co.uk</a>><br>
> wrote:<br>
><br>
> > I've been caught by that before. Try [% entries.$id.item('_id') %].<br>
> > For some reason (would interested to learn what), TT doesn't seem<br>
> > to be able to cope with leading underscores in data structures. You<br>
> > can prove entries contains data using:<br>
> > [% USE Dumper(Indent=1) %]<br>
> > [% FOREACH id IN entries %]<br>
> >   <pre>[% Dumper.dump(id) %]</pre><br>
> > [% END %]<br>
> ><br>
> > or just [% Dumper.dump(entries) %]<br>
> ><br>
> > On 18/10/2017 06:28, Gavin Colborne wrote:<br>
> ><br>
> > Hi Dancers,<br>
> ><br>
> > I am pretty new to Dancer and really like the light nature of the<br>
> > framework.<br>
> ><br>
> > I am trying to create a route which will show data from a MongoDB<br>
> > collection and struggling with the syntax.<br>
> ><br>
> > I have the following in my app:<br>
> ><br>
> > sub connect_mongo {<br>
> >     my $client = MongoDB->connect('mongodb://a.<wbr>b.c.d') or die "Error<br>
> > connecting to Mongo";<br>
> > my $db = $client->get_database( 'lfi-perl' );<br>
> > return($db);<br>
> > }<br>
> ><br>
> > get '/mongo' => sub {<br>
> >     my $db = connect_mongo();<br>
> > my $docs = $db->get_collection( 'Test-Collection' );<br>
> > my $all_docs;<br>
> >      template '<a href="http://show_mongo.tt" rel="noreferrer" target="_blank">show_mongo.tt</a>', {<br>
> >          'entries' => $all_docs = $docs->find(),<br>
> >      };<br>
> > };<br>
> ><br>
> > Then in my view the following:<br>
> ><br>
> > [% FOREACH id IN entries.keys.nsort %]<br>
> ><br>
> > [% entries.$id._id %]<br>
> ><br>
> ><br>
> ><br>
> > I am not able to see any data in my view but am also not seeing any<br>
> > errors.<br>
> ><br>
> > Any examples of getting data from Mongo in Dancer would be really<br>
> > helpful.<br>
> ><br>
> > Thank you in advance,<br>
> ><br>
> > Gavin<br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> ><br>
> > Best Regards,<br>
> ><br>
> > Gavin Colborne<br>
> ><br>
> > Managing Director,<br>
> ><br>
> > Tele:     0207 193 2014<br>
> > Mobile: 0788 400 4339<br>
> > Skype: gavincolborne<br>
> > Visit: <a href="http://www.littleforest.co.uk" rel="noreferrer" target="_blank">www.littleforest.co.uk</a><br>
> ><br>
> > [image: Little Forest LFi] <<a href="http://www.littleforest.co.uk/" rel="noreferrer" target="_blank">http://www.littleforest.co.<wbr>uk/</a>><br>
> ><br>
> ><br>
> > ______________________________<wbr>_________________<br>
> > dancer-users mailing<br>
> > listdancer-users@dancer.<wbr>pmhttp://<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" rel="noreferrer" target="_blank">lists.preshweb.co.uk/<wbr>mailman/listinfo/dancer-users</a><br>
> ><br>
> ><br>
> > --<br>
> > Richard Jones<br>
> ><br>
> ><br>
> > ______________________________<wbr>_________________<br>
> > dancer-users mailing list<br>
> > <a href="mailto:dancer-users@dancer.pm">dancer-users@dancer.pm</a><br>
> > <a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" rel="noreferrer" target="_blank">http://lists.preshweb.co.uk/<wbr>mailman/listinfo/dancer-users</a><br>
> ><br>
> ><br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
<br>
C. Chad Wallace, B.Sc.<br>
The Lodging Company<br>
<a href="http://www.lodgingcompany.com/" rel="noreferrer" target="_blank">http://www.lodgingcompany.com/</a><br>
OpenPGP Public Key ID: 0x262208A0<br>
<br>
______________________________<wbr>_________________<br>
dancer-users mailing list<br>
<a href="mailto:dancer-users@dancer.pm">dancer-users@dancer.pm</a><br>
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" rel="noreferrer" target="_blank">http://lists.preshweb.co.uk/<wbr>mailman/listinfo/dancer-users</a><br>
</font></span></blockquote></div><br></div>