如何在mongodb中保存ParseGeoPoint对象(使用mLab)

时间:2017-08-22 19:09:49

标签: mongodb parse-server geopoints mlab

  

我想用addressoints保存地址(关系对象),以便   稍后检索所有具有附近地址的事件   位置,它将全部基于坐标。使用下面的部分   代码 -

$address = new ParseObject("Address");
$point = new ParseGeoPoint(23.80, -120.90);
$address->set("location", $point);
$address->save();
  

我的数据库中的位置类型是geopoint,但它给了我连续的   错误 -

内部服务器错误。错误代码:异常'异常'有消息'无法序列化未保存的Parse.Object'

发布此我尝试了以下代码 -

$address = new ParseObject("Address");
$address->save();
$point = new ParseGeoPoint(23.80, -120.90);
$address->set("location", $point);
$address->save();
  

我试过这个,以便删除未保存的Parse.Object的上述错误,但是   它最终只保存我的地址对象,从不保存位置   它。我怎样才能做到这一点?

完整的代码视图 -

function saveEvent() {
   $title = $this->input->post('title');
   $eventCode = $this->input->post('eventCode');
   $event = new ParseObject("Event");
   $event->set("title", $title);
   $event->set("eventCode", $eventCode);
   $address = $this->saveAddressObject($event, $url);
   $event_address_Relation = $event->getRelation("address");
   if (!empty($address)) {
            $event_address_Relation->add($address);
   }
   $event->save();
  }
function saveAddressObject($event, $url) {
    $fullAddress = $this->input->post('fullAddress');
    $address1 = $this->input->post('address1');
    $address2 = $this->input->post('address2');
    $city = $this->input->post('city');
    $state = $this->input->post('state');
    $zipCode = (int) $this->input->post('zipCode');
    $country = $this->input->post('country');
    $latitude = $this->input->post('latitude');
    $longitude = $this->input->post('longitude');
    try {
            $address = new ParseObject("Address");
            $address->set("fullAddress", $fullAddress);
            $address->set("address1", $address1);
            $address->set("address2", $address2);
            $address->set("city", $city);
            $address->set("state", $state);
            $address->set("zipCode", $zipCode);
            $address->set("country", $country);
            $address->set("latitude", $latitude);
            $address->set("longitude", $longitude);
            $point = new ParseGeoPoint($latitude, $longitude);
            $address->set("location", $point);
            $address->save();
           return $address;
    } catch (ParseException $error) {
        print_r($error);
    } catch (Exception $ex1) {
        print_r($ex1);
    }
}

1 个答案:

答案 0 :(得分:1)

对于第二个示例,一次只能保存一个对象的实例,而另一个尝试正在进行的第二次+尝试将无提示地失败。至少在iOS上。我想这里的情况类似。

这是您的确切代码吗?当您尝试将尚未保存的新对象附加到另一个对象时,您提到的第一个错误往往会发生,并且您提到这些地址是以关系方式使用的。我敢打赌,你试图将一个对象作为指针附加到另一个对象,并且没有保存该对象,这意味着它还没有ID,因此你无法创建指向它的指针。

编辑 - 我不确定你使用的是哪个SDK,但是保存调用是异步的,这意味着它不会马上发生,所以你可能认为你是先保存一个对象,但实际上保存没有'完了,然后你试着将它附加到另一个物体?这也可能与您的第二个示例失败的原因有关,因为您没有在第二个保存后返回的任何完成处理程序。也许第一个设法完成,但第二个设法在你的函数返回之前就不会完成。