我想获取数组元素并存储在Perl变量中。如果我将0
替换为?
中的$cur->{Type}[?]->{_id}
,则只能得到一个数组元素,但我需要全部。以下是我的收藏集
{
"_id" : ObjectId("5b7fdb050cc3c23478005741"),
"DBName" : "sample",
"DBServerURL" : "mongodb://localhost:27017/",
"Type" : [
{
"_id" : ObjectId("5b801dc963f8c81df83891bd")
},
{
"_id" : ObjectId("5b801dc963f8c81df83891be")
},
{
"_id" : ObjectId("5b801dc963f8c81df83891bf")
},
{
"_id" : ObjectId("5b801dc963f8c81df83891c0")
}
]
}
我正在尝试从所有字段中获取ObjectId
$cursor = $CustColl->find(
{DBName => "sample",DBServerURL => "mongodb://localhost:27017/"},{'_id' => 1, 'Type.$._id' => 1, 'DBServerURL' => 1, 'DBName' => 1}
);
while(my $cur = $cursor->next){
my $cid = "$cur->{_id}" ;
my $jid = "$cur->{Type}[?]->{_id}" ;
my $url = "$cur->{DBServerURL}" ;
my $name = "$cur->{DBName}" ;
print "$cid : $jid : $url : $name\n" ;
}
我想要如下输出:
5b7fdb050cc3c23478005741 : 5b801dc963f8c81df83891bd : mongodb://localhost:27017/ sample
5b7fdb050cc3c23478005741 : 5b801dc963f8c81df83891be : mongodb://localhost:27017/ sample
5b7fdb050cc3c23478005741 : 5b801dc963f8c81df83891bf : mongodb://localhost:27017/ sample
5b7fdb050cc3c23478005741 : 5b801dc963f8c81df83891c0 : mongodb://localhost:27017/ sample
答案 0 :(得分:3)
您快到了。首先,我将您的数据固定为JSON,但这没什么大不了的:
export enum MyWorkflowComponentState {
Selecting, // Select "sub models"
Editing, // Edit parent model
Displaying,
...
}
@Component()
export class MyWorkflowComponent {
myWorkflowComponentState = MyWorkflowComponentState;
@Input()
state: MyWorkflowComponentState;
model: MyModel;
...
}
<div [ngSwitch]="state">
<div *ngSwitchCase="myWorkflowComponentState.Selecting">
<app-select [model]="model"> </app-select>
</div>
<div *ngSwitchCase="myWorkflowComponentState.Editing">
<app-edit [model]="model"> </app-edit>
</div>
<div *ngSwitchCase="myWorkflowComponentState.Displaying">
<app-display [model]="model"> </app-display>
</div>
...
</div>
这是一个JSON数组,因此您可以一次遍历一个元素。在显示为数组引用的Perl中,使用v5.20中引入的postfix dereference使它变得可口(但没有它就不那么难了):
my $json = q([{
"_id" : "5b7fdb050cc3c23478005741",
"DBName" : "sample",
"DBServerURL" : "mongodb://localhost:27017/",
"Type" : [
{
"_id" : "5b801dc963f8c81df83891bd"
},
{
"_id" : "5b801dc963f8c81df83891be"
},
{
"_id" : "5b801dc963f8c81df83891bf"
},
{
"_id" : "5b801dc963f8c81df83891c0"
}
]
} ]);
use JSON::XS;
my $perl = decode_json( $json );
诀窍是while(my $cur = shift $perl->@*){ # or @$perl
my $cid = $cur->{_id} ;
my $url = $cur->{DBServerURL} ;
my $name = $cur->{DBName} ;
foreach my $hash ( $cur->{Type}->@* ) { # or @{ $cur->{Type} }
my $jid = $hash->{_id};
print "$cid : $jid : $url : $name\n" ;
}
}
的东西在另一个数组中,您想逐一遍历。 $jid
中有一个foreach
可以做到这一点。它对每一个都运行一次并输出行。