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