2017-03-11 1 views
0

Je peux rechercher des valeurs spécifiques pour les champs. Comment puis-je rechercher des champs égaux à d'autres champs? Par exemple,Requête Cloudant pour renvoyer des enregistrements où 2 champs sont égaux

J'ai docId et parentDocId; comment puis-je rechercher des enregistrements qui ont docId == parentDocId?

requête pour rechercher id spécifique qui est égal à "123":

let query = ["parentDocId": ["$eq":"123"]] 
let result = datastore.find(query, skip: 0, limit: 0, fields: nil, sort: nil) 

Je voudrais chercher où parentDocId == docId.

Des idées?

p.s. J'utilise Swift

Répondre

1

Vous n'avez pas besoin d'utiliser Cloudant Query. En supposant que vos documents ont la structure suivante

{ 
"_id": "2b7946de457b6fc9af3e3d29faa3fcba", 
"_rev": "3-088f847ef010504e7a5beb0c821d72ea", 
"parentDocId": "2b7946de457b6fc9af3e3d29faa3fcba", 
... 
} 

vous pouvez créer a view comme celui-ci

PUT https://$USERNAME:[email protected]$HOST/$DATABASE/_design/demo HTTP/1.1 
Content-Type: application/json 

{ 
    "views": { 
    "parent_child": { 
    "map": "function (doc) {\n if(doc._id === doc.parentDocId) {\n emit(doc._id, 1);\n }\n}" 
    } 
    } 
} 

et l'interroger:

GET https://$USERNAME:[email protected]$HOST/$DATABASE/_design/demo/_view/parent_child HTTP/1.1 

Toutes les bibliothèques clientes devraient soutenir vues car ils sont un concept fondamental dans CouchDB/Cloudant. Je ne suis pas familier avec Swift, mais la documentation de la bibliothèque devrait identifier la méthode appropriée que vous devez invoquer pour faire un appel équivalent au protocole HTTP général que j'ai listé.

+0

Hmm. La seule chose est que je l'utilise actuellement en mode hors ligne. Il n'y a pas d'internet, et pas de nuage. Puis-je créer des vues en mode hors connexion? Je vais essayer. – oyalhi

+0

Si vous avez un pouchdb local pour votre première installation hors ligne, vous pouvez créer des vues là aussi, oui. –