下面是我的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
。
答案 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'}";