our
$VERSION
=
'v1.1.0'
;
Document
)
;
InstanceOf
HashRef
Str
)
;
has
db_name
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> Str,
);
has
coll_name
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> Str,
);
has
client
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> InstanceOf [
'MongoDB::MongoClient'
],
);
has
fieldname
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> Str,
);
has
filter
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> Document,
);
has
options
=> (
is
=>
'ro'
,
required
=> 1,
isa
=> HashRef,
);
with
$_
for
qw(
MongoDB::Role::_PrivateConstructor
MongoDB::Role::_ReadOp
MongoDB::Role::_CommandCursorOp
)
;
sub
execute {
my
(
$self
,
$link
,
$topology
) =
@_
;
my
$options
=
$self
->options;
my
$filter
=
ref
(
$self
->filter ) eq
'ARRAY'
? { @{
$self
->filter } }
:
$self
->filter;
my
@command
= (
distinct
=>
$self
->coll_name,
key
=>
$self
->fieldname,
query
=>
$filter
,
(
$link
->accepts_wire_version(4) ?
@{
$self
->read_concern->as_args } : ()),
%$options
);
my
$op
= MongoDB::Op::_Command->_new(
db_name
=>
$self
->db_name,
query
=> Tie::IxHash->new(
@command
),
query_flags
=> {},
read_preference
=>
$self
->read_preference,
bson_codec
=>
$self
->bson_codec,
);
my
$res
=
$op
->execute(
$link
,
$topology
);
$res
->output->{cursor} = {
ns
=>
''
,
id
=> 0,
firstBatch
=> (
delete
$res
->output->{
values
} ) || [],
};
return
$self
->_build_result_from_cursor(
$res
);
}
1;