sai9924 发表于 2012-04-12 17:28

Mongodb模块怎么查询多条?




use MongoDB;
use Data::Dumper;

my $connection = MongoDB::Connection->new( host => 'localhost', port => 27017 );
my $database   = $connection->foo;
my $collection = $database->bar;
   $collection->insert( { 'id' => '1', 'data' => 'n1' });
   $collection->insert( { 'id' => '1', 'data' => 'n2' });
my $data = $collection->find();               
print Dumper $data;

在文档里只找到find_one方法,只能查询出一条记录

=item C<SELECT * FROM users>

    $db->users->find;

文档里的find方法
my $data       = $collection->find();
print Dumper $data

也没有数据记录返回,只有数据库信息


> db.bar.find()
{ "_id" : ObjectId("4f869e4a0933a99d63000000"), "data" : "n1", "id" : "1" }
{ "_id" : ObjectId("4f869f4c93bda4b563000001"), "data" : "n2", "id" : "1" }
数据库是有2条记录的

这个模块能不能查询多条?

sjdy521 发表于 2012-04-12 18:11

本帖最后由 sjdy521 于 2012-04-12 18:16 编辑

先说下我的不理解的地方,望指教
MongoDB这玩意应该是非关系型数据库吧,可以一个key对应两个value?不应该是一个key对应一个value?
我对nosql不是非常熟悉,请熟悉的人指导下我。。

另外,看cpan上 这个模块只提供了一个find_one的方法,假如真的可以存在多条记录的话。
那么是不是有可能类似 while($object->find_one){}这种形式循环取出所有数据?(前提是find_one每次会取出不同的一个,作者没有说明这个特性。。)

sai9924 发表于 2012-04-12 19:05

但是执行 print my $data = $collection->find({'id' => '1'})->count();
2
他的确是有多条记录的

myeverthing 发表于 2012-04-13 09:26

前几天刚看了下,应该是:my $data       = $collection->find();
my $i = 0;
while (my $object = $data->next) {
      foreach $key(keys %{$object}){
                print "the $i++ result is $key => ${$object}{$key}\n";
      }
}

sai9924 发表于 2012-04-13 10:24

回复 4# myeverthing


    多谢 要的就是这个

sjdy521 发表于 2012-04-13 10:49

回复 5# sai9924


    你就是要的那个??
find是查询出所有的记录,你要的是id=1的所有记录啊!

sjdy521 发表于 2012-04-13 10:50

回复 3# sai9924


    find() 可以传递参数?

sai9924 发表于 2012-04-13 10:54

回复 7# sjdy521


    $collection->find({'id' => '1'});
    find 可以传递参数
页: [1]
查看完整版本: Mongodb模块怎么查询多条?