簡體   English   中英

perl mongodb地理空間數組插入失敗

[英]perl mongodb geospatial array insert fails

我在perl Mojolicious應用程序中運行以下代碼。 它所針對的集合將2d索引應用於“ loc”屬性,該屬性是[lat,long]形式的2個元素數組。

MongoDB是2.0.1,perl MongoDB是0.46。 perl是64位

刪除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"});
    }

}

我不是地理索引專家,但是我認為您的坐標順序可能不正確。 根據2d索引的文檔 ,數組需要采用[ long, lat ]的形式,但是您需要[ lat, long ] 我的猜測是索引器發現緯度/經度值超出范圍。

您也不能將Math :: BigFloat值插入MongoDB,但是如果perl認為它們是字符串,則可以通過向其添加零來使perl認為您的值是浮點型。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM