从MongoDB集合中的数组中获取值

时间:2018-06-22 07:35:07

标签: mongodb perl

下面是我的MongoDB收藏

{
    "_id" : ObjectId("5b2a2ee19d332d0118b26dfe"),
    "Name" : "Rock",
    "Job" : [
        {
            "Id" : ObjectId("5b2b93c63629d0271ce366ae"),
            "JobName" : "abc",
            "JobTrack" : [
                "123"
            ]
        }
    ]
}

我想获取两个ObjectId

my $cursor = $custColl->find(
    { 'Job.JobName' => "abc", 'Job.JobTrack' => "123" },
    { '_id' => 1, 'Job.Id' => 1 }
);

while ( my $next = $cursor->next ) {

    my $CustomerId = "$next->{_id}";
    my $JobId      = "$next->{'Job.Id'}";

    say "$CustomerId => $JobId\n";
}

我从上面的代码中得到的结果如下

5b2a2ee19d332d0118b26dfe =>

使用此代码,我无法获得$JobId

2 个答案:

答案 0 :(得分:1)

假设查询找到一个文档,$next是一个类似于原始JSON的Perl数据结构:

    {
      'Name' => 'Rock',
      '_id' => bless( {
                        'value' => '5b2a2ee19d332d0118b26dfe'
                      }, 'MongoDB::OID' ),
      'Job' => [
                 {
                   'JobName' => 'abc',
                   'JobTrack' => [
                                   '123'
                                 ],
                   'Id' => bless( {
                                    'value' => '5b2b93c63629d0271ce366ae'
                                  }, 'MongoDB::OID' )
                 }
               ]
    }

要获取作业ID,您需要使用Perl语法而不是MongoDB语法取消引用该结构:

my $JobId      = "$next->{Job}[0]{Id}";

答案 1 :(得分:-1)

您需要访问Job数组的特定元素。因为示例中只有一个元素,所以它的索引必须为零。因此,您需要

my $JobId = "$next->{'Job.0.Id'}";