0

I'm trying to build a geo index

db.collection('servicereg').aggregate([

{
    $geoNear : {
        near : [ -121.9181731, 37.4544319 ],
        distanceField : "dist",
        maxDistance : 500000,
        // query: { "servdescription": { $regex: "need" } },
        // includeLocs: "dist.location",
        // num: 1,
        spherical : true

    }
} ], function(err, result) {
    if (err)
        throw err;
    console.log("agg result", result);
    console.log("error", err);
});

Here is the index creation command

db.collection('servicereg').ensureIndex( {"location.longlat" : "2dsphere"},  
function(err, items) {

console.log(err);
console.log(items);
});

Here are couple of documents

    {
  "_id" : ObjectId("53c23d668881199c1474b070"),
  "servicename" : "service1",
  "servdescription" : "battery change",
  "email" : "[email protected]",
  "location" : {
    "country" : "United States",
    "city" : "Beaverton",
    "state" : "Oregon",
    "stateCode" : "OR",
    "zipcode" : "97006",
    "streetName" : "Southwest Millikan Way",
    "streetNumber" : "15110",
    "countryCode" : "US",
    "longlat" : {
      "type" : "point",
      "coordinates" : [-122.8325687, 45.495655]
    }
  },
  "price" : null,
  "expiry" : null,
  "category" : null,
  "dateofservice" : null
}

/* 6 */
{
  "_id" : ObjectId("53c23d998881199c1474b071"),
  "servicename" : "se23",
  "servdescription" : "need aspirin",
  "email" : "[email protected]",
  "location" : {
    "country" : "United States",
    "city" : "Milpitas",
    "state" : "California",
    "stateCode" : "CA",
    "zipcode" : "95035",
    "streetName" : "Dixon Landing Road",
    "streetNumber" : "440",
    "countryCode" : "US",
    "longlat" : {
      "type" : "point",
      "coordinates" : [-121.9181734, 37.4544319]
    }
  },
  "price" : null,
  "expiry" : null,
  "category" : null,
  "dateofservice" : null
 }

While building the index, I get the following error

        {
          [
            MongoError: Can't extract geo keys from object, malformed geometry?:    
                 { 
                   _id: ObjectId('53c23ba68881199c1474b06f'), 
                   servicename: "service11", 
                   servdescription: "oil change", 
                   email: "[email protected]", 
                   location: {  
                        country: "United States", 
                        city: "Redwood City", 
                        state: "California", 
                        stateCode: "CA", 
                        zipcode: "94065", 
                        streetName: "Island Drive", 
                        streetNumber: "1100", 
                        countryCode: "US",            
                        longlat: { type: "point", coordinates: [ -122.2562282, 37.5366173 ] } 
                        },
                   price: null, expiry: null, category: null, dateofservice: null 
                 }
          ] name: 'MongoError', connectionId: 229, err: 'Can\'t extract geo keys from object, malformed geometry?: 
             { 
                 _id: ObjectId(\'53c23ba68881199c1474b06f\'), 
                 servicename: "service11",
                 servdescription: "oil change", 
                 email: "[email protected]", 
                 location: { 
                      country: "United States", 
                      city: "Redwood City", 
                      state: "California", 
                      stateCode: "CA", 
                      zipcode: "94065", 
                      streetName: "Island Drive", 
                      streetNumber: "1100", 
                      countryCode: "US", 
                      longlat: { type: "point", coordinates: [ -122.2562282, 37.5366173 ] } }, 
                  price: null, expiry: null, category: null, dateofservice: null 
                }',
              code: 16755,
              n: 0,
              ok: 1
           }

Anybody has any idea, what is wrong here ?

Thanks in advance

PK

1 Answer 1

1

You have an incorrect type specification for your data. The correct type is "Point" not "point":

http://geojson.org/geojson-spec.html

2.1.2. Point

For type "Point", the "coordinates" member must be a single position.

You can test your Geojson data here:

http://geojsonlint.com/

Note that when test it says that there is no such type as "point".

Sign up to request clarification or add additional context in comments.

2 Comments

Beat me to it. Yes, you can insert GeoJSON that is invalid into MongoDB, as it is still valid JSON, and this only becomes evident when you try and create a spatial index or do a spatial query.
Thanks John B and John P

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.