1
 using MongoDB;

 my $content = $db->items->find('something');
 my $json;
 while($content->next){
           push the data into a $json
 }

方法があるところ

 my @variables = $content->all;
 foreach (@variables){
    push the data into $json
 }

データを直接json文字列にプッシュして変換できる方法はありますか?

データをMojoliciousにプッシュします

$self->render(json => $json);
4

1 に答える 1

2

そのための小さな Mojo テスト スクリプトを作成しました。使用する

$collection->find->all

イテレータではなく、すべてのページのリストを取得します。テストは次のとおりです。

#!/usr/bin/env perl

use Mojolicious::Lite;
use MongoDB;

# --- MongoDB preparation ---

my $conn    = MongoDB::Connection->new; # create a MongoDB connection
my $test_db = $conn->test;              # a MongoDB database
my $tests   = $test_db->tests;          # a test collection

# insert test objects
$tests->remove();
$tests->insert({name => 'foo', age => 42});
$tests->insert({name => 'bar', age => 17});

# --- Mojolicious::Lite web app ---

# access the tests collection in a mojoy way
helper mongo_tests => sub {$tests};

# list all tests as JSON
get '/' => sub {
    my $self = shift;
    $self->render(json => [$self->mongo_tests->find->all]);
};

# --- web app test ---

use Test::More tests => 6;
use Test::Mojo;

my $tester = Test::Mojo->new;

$tester->get_ok('/')->status_is(200);
my $json = $tester->tx->res->json;
is $json->[0]{name},    'foo',  'right name';
is $json->[0]{age},     42,     'right age';
is $json->[1]{name},    'bar',  'right name';
is $json->[1]{age},     17,     'right age';

出力:

1..6
ok 1 - get /
ok 2 - 200 OK
ok 3 - right name
ok 4 - right age
ok 5 - right name
ok 6 - right age

注: MongoDB は OID を追加するためis_deeply、データ構造のテストには使用できませんでした。$jsonダンプすると表示されます$json

于 2012-11-21T14:59:35.627 に答える