2013-05-29 2 views
0

다음 코드가 Perl Mojolicious 앱에서 실행되고 있습니다. 그것이 실행되는 콜렉션은 2 차원 인덱스가 [lat, long] 형식의 2 요소 배열 인 "loc"속성에 적용됩니다.perl mongodb 지형 공간 배열 삽입이 실패합니다.

MongoDB는 2.0.1, perl MongoDB는 0.46입니다. perl이 64bit

2d 색인을 삭제할 때 새 문서를 삽입/업로드하는 데 문제가 없습니다. 인덱스가 적용되면 last_error는 "위치 객체가 예상되고 위치 배열이 올바른 형식이 아닙니다"라고 반환합니다.

위도와 경도 입력을 여러 방법으로 조작 해 보았습니다. 여기에 코드가 있습니다 ... 어떤 아이디어입니까?

sub checkmein { 
    my $self = shift; 
    my $mail = $self->stash('mail'); 
    my $lat = $self->param('lat'); 
    my $lng = $self->param('long'); 

    # upsert 

    my $c = $self->db->checkins; 
    $mail = lc $mail; 

    my $now = time; 
    my @loc = (Math::BigFloat->new($lng),Math::BigFloat->new($lat)); 

     $c->update(
      {'mail'=>$mail }, 
      { 'mail'=>$mail, 'when'=>$now, 'loc'=>\@loc }, 
      { upsert=>1 } 
     ); 

    my $err = $self->db->last_error(); 

    if (defined $err->{'err'}) { 
      $self->render(json=>{'status'=>'error','message'=>"Problem checking in $mail to $lat,$lng"}); 
    } else { 
      $self->render(json=>{'status'=>'ok','message'=>"$mail checked in to $lat,$lng"}); 
    } 

}

+0

'eval'의 코드를 컴파일 할 수 없습니다. MongoDB (및 MongoDB 드라이버)도 심각하게 오래되었지만 문제는 아닙니다. – friedo

+0

예, 우리가 말하는대로 mongodb 업데이트를 계획합니다. sval에 대한 sory, 나쁜 상처와 붙여 넣기 ... 지금은 정확해야합니다 –

답변

1

나는 지리 인덱스에 대한 전문가는 아니지만 좌표가 잘못된 순서로 될 수있다 생각합니다. documentation에 2d 색인을 사용하면 배열의 형식은 [ long, lat ]이어야하지만 [ lat, long ]이됩니다. 내 생각 엔 인덱서는 범위를 벗어난 위도/경도 값을 찾고 있습니다.

또한 MongoDB에 Math :: BigFloat 값을 삽입 할 수 없지만 perl이 문자열이라고 생각하면 perl은 값을 0으로 추가하여 부동 소수점으로 간주 할 수 있습니다.

$lat += 0; 
$lng += 0; 
+0

그래, 난 2d에 대해 많이 몰라 ... 당신 말이 맞아. 나는 그 변화를 만들었습니다. 이제 MongoDB 드라이버에서이 오류가 발생합니다. [오류] type (Math :: BigFloat) /usr/local/lib/perl5/site_perl/5.12.4/x86_64-linux/MongoDB/Collection.pm 라인 376에서 처리되지 않았습니다. –

+1

MongoDB 드라이버는 BigFloats를 내부적으로 지원하지 않지만 위도와 경도 값에 사용할 이유가 없어야합니다. 32 비트 Perl에서 64 비트 int를 처리해야하는 경우 Math :: BigInt를 지원합니다. 일반 스칼라로 삽입 할 수 있어야합니다. DB에 문자열로 표시되면 '0.0'을 추가하여 강제로 부동 상태로 만듭니다. (업데이트 된 답변). – friedo

+0

bignum을 제거하고 +0.0을 사용하여 강제로 플로팅하십시오 ... 감사합니다. –

관련 문제