laravel에 출력을 표시되지집계 쿼리 내 MongoDB를 데이터베이스에 수집을 다음 한
clat_output
내가 의 조건이 시간와 clat_output를 검색 할{
"_id" : ObjectId("59fc6492421aa91e3e71d753"),
"output" : [
{
"time" : "100",
"clat" : "127"
},
{
"time" : "254",
"clat" : "294"
},
{
"time" : "354",
"clat" : "437"
}
...
...
]
}
clat_output는 주어진 범위 사이에 있어야합니다. 예를
나는 그래서{
"_id" : ObjectId("59fc6492421aa91e3e71d753"),
"output" : [
{
"time" : "100",
"clat" : "127"
},
{
"time" : "254",
"clat" : "294"
}
]
}
나는 다음과 같은 쿼리를 실행 출력
다음 주어야한다300
에 1
로 주어진 시간 간격으로 _id = ObjectId("59fc6492421aa91e3e71d753")
을 가진 clat_output을 인출 할
를 들어
mongodb 콘솔에서 원하는 결과를 얻습니다. 내가 laravel에서 원시 쿼리로 같은 집계 쿼리를 변환 할 때
db.clat_output.aggregate({
'$match' : {"_id" : ObjectId("59fc6492421aa91e3e71d753")}}, {
'$addFields' : {
'output' : {
'$filter' : {
'input' : '$output',
'as' : 'result',
'cond' : {
'$and' : [
{'$gte' : ['$$result.time', '1']},
{'$lte' : ['$$result.time', '300']}
]
}
}
}
}
});
는하지만, 그것은 output
로 빈 배열을 보여주는 것. 다음은 laravel의 내 검색어입니다.
public function clat_output($id, $start, $end) {
$query = [
['$match' => ["_id" => $id]], [
'$addFields' => [
'output' => [
'$filter' => ['input' => '$output', 'as' => 'result',
'cond' => [
'$and' => [
['$gte' => ['$$result.time', $start]],
['$lte' => ['$$result.time', $end]]
]
]
]
]
]
]
];
$result = self::raw(function ($collection) {
return $collection->aggregate($query);
});
return $result;
}
직접 관련이 없더라도 데이터에 결함이 있습니다. ''time ''을 문자열로 사용하고''5 '는'1 '과'300 '의 값 사이에'5 '로 시작하지 않으므로'5 ' ''와 범위 내에없는 '문자열'로 표시됩니다. "숫자 범위"를 쿼리하려는 경우 실제로 "숫자"값을 원합니다. 그래서 당신은 정말로 데이터를 변환해야합니다. –
감사합니다. @ NeilLunn. – Sadhu