2015-08-17 5 views
2

J'ai créé une vue spatiale couchbase simple pour obtenir la liste du rapport, mais il donne {error: "error", reason: "badarg"} erreur.Couchbase donne une erreur badarg

Voici mon avis: -

function (doc, meta) { 
    if (doc.type == "report" && doc.location && doc.location.type && doc.location.coordinates) { 

      if(doc.location.type=='Point'){ 
      emit(doc.location, { 
       summary:doc.summary 
       }); 
      } 
    } 
} 

pourquoi cette erreur de badarg arrive, même travail de vue sur les différents doc.type

+0

réalise un travail quand vous l'exécutez dans l'interface utilisateur? – FuzzyAmi

+0

non, cela n'a pas fonctionné dans l'interface utilisateur – rash111

+0

Quelle erreur obtenez-vous via l'interface utilisateur? – FuzzyAmi

Répondre

0

je votre vue sur un seau vide et utilisé la requête par exemple sur la Voir la page de l'interface utilisateur pour le tester:

_design/dev_test/_spatial/test?stale=false&connection_timeout=60000&limit=10&skip=0 

Sur un seau vide, je suis un bon résultat, mais vide, ce qui était attendu. Dès que j'ai ajouté le document exemple ci-dessus, je reçois votre même erreur:

{error: "error", reason: "badarg"} 

Après une réduction de la vue et du document que je trouve que ce document particulier, il échoue parce qu'il ya des guillemets doubles autour de la coordonnées de latitude et de longitude dans votre champ de localisation (doc.location.coordinates). Ils doivent être des nombres sans guillemets si vous voulez passer votre champ de localisation en tant que géométrie pour la clé. Plus sur les vues spatiales peut être trouvé ici: http://docs.couchbase.com/admin/admin/Views/views-geospatial.html

Idéalement, vous résoudre votre problème en fixant les documents dans votre seau. Tout ce qui crée votre champ de localisation consiste à mettre les coordonnées sous forme de chaînes quand elles doivent être flottantes. Si cela est impossible, alors vous pouvez essayer quelque chose de semblable à ce qui suit pour faire la conversion dans votre vue, à tout le moins cela devrait prouver que les coordonnées de chaîne sont la cause racine de votre problème:

function (doc, meta) { 
    if (doc.type == "report" && doc.location && doc.location.type && doc.location.coordinates) { 
    if(doc.location.type=='Point'){ 
     for(var i=0; i<doc.location.coordinates.length; i++){ 
     doc.location.coordinates[i] = parseFloat(doc.location.coordinates[i]); 
     } 
     emit(doc.location, {summary:doc.summary}); 
    } 
    } 
} 
+0

Existe-t-il un moyen de gérer cela dans les vues, comme vérifier s'il s'agit d'une chaîne ou d'un numéro? – rash111

+0

Oui, les vues sont juste javascript, vous pouvez donc tester les valeurs dans doc.location.coordinates , convertir en double s si nécessaire, utilisez-le comme géométrie pour la clé. – kruthar

+0

avez-vous un exemple de cela? – rash111