ishiducaの日記 このページをアンテナに追加 RSSフィード

2010-09-17

[]MongoDBはじめてみました その3 13:32 MongoDBはじめてみました その3 - ishiducaの日記 を含むブックマーク はてなブックマーク - MongoDBはじめてみました その3 - ishiducaの日記 MongoDBはじめてみました その3 - ishiducaの日記 のブックマークコメント

まずは、Twitter検索で mongodb を含む結果を mydb.things コレクションに保存してみる

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use URI;
use LWP::UserAgent;
use MongoDB;
use JSON;

my $uri = URI->new( 'http://search.twitter.com/search.json' );
$uri->query_form( "q" => 'mongodb' );

my $ua = LWP::UserAgent->new;
my $response = $ua->get( $uri );
$response->is_success or die $response->status_line;

my $json = decode_json( $response->{_content} );

my $connection = MongoDB::Connection->new( host => 'localhost', port => 27017 );
my $database   = $connection->mydb;
my $collection = $database->things;

for (@{$json->{results}}) {
    my $id   = $collection->insert($_);
}

exit 0;

次に、mydb.things コレクションに保存したデータ(Twitter検索で「mongodb」を含むツイートを保存したもの)から mongodb にマッチするハッシュを抜き出してみた。

MongoDB::Collection の find_one メソッドは、マッチしたドキュメント(ハッシュ)を返すので、ハッシュのプロパティを指定すれば、そのまま出力できるんだけど、 query メソッド(find メソッドと同じ)は Cursor オブジェクト(MongoDB::Cursorオブジェクト)を返すので、これをデータ(ハッシュ)に直してから処理をしないといけない。

search.pl

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Encode;
use MongoDB;
#use Data::Dumper;

my $connection = MongoDB::Connection->new( host => 'localhost', port => 27017 );
my $database   = $connection->mydb;
my $collection = $database->things;

#my $a_result = $collection->find_one( { text => qr/mongo/i } );
#print encode_utf8( $a_result->{text} );

my $cursor = $collection->query( { text => qr/mongodb/i } );

while (my $object = $cursor->next) {
    # print Dumper "$object\n";
    print encode_utf8( "$object->{text}\n" );
}

print "\n";
exit 0;

カーソルオブジェクトは、「クエリーとカーソル - Docs-Japanese - 10gen Confluence 」を参照しました。

トラックバック - http://perl.g.hatena.ne.jp/ishiduca/20100917