0

Je souhaite que le Google API documentation soit un peu plus novice.Google Datastore Utiliser Sélectionner une requête par ID à l'aide de l'API dans GAS

Je suis passé par la sélection de toutes les entités, la mise à jour d'une entité, l'insertion et la suppression. Maintenant, je voudrais commencer à sélectionner des entités spécifiques par critères. L'API https://datastore.googleapis.com/v1/projects/project-id-5200707080506492774:runQuery est à cet effet, et si je fournis la charge utile de "query: {}", j'obtiens toutes les entités. Je peux aussi filtrer par type. Mais je ne peux pas comprendre comment filtrer par une propriété. J'essaie d'obtenir une entité par nom avec cette JSON charge utile de chaîne de caractères:

var payload = 

{ 
    "query": { 
    "kind": [ 
     { 
     "name": "Test" 
     } 
    ], 
    "filter": { 
     "propertyFilter": { 
     "property": { 
      "name": "id" 
     }, 
     "op": "EQUAL", 
     "value": { 
      "stringValue": "5634472569470976" 
     } 
     } 
    } 
    } 
} 

Mais je reçois le 200 résultats par lots:

{ 
    "batch": { 
    "entityResultType": "FULL", 
    "endCursor": "CgA=", 
    "moreResults": "NO_MORE_RESULTS" 
    } 
} 

Alias: Rien n'a été trouvé.

Quelqu'un pourrait m'éclairer en ce qui concerne la façon de sélectionner par le nom/id de l'entité ou d'autres domaines de données?


EDIT:

Voici la structure de fichier de mes entités. Ils sont organisés dans le cadre du test de genre:

{ 
     "batch": { 
     "entityResultType": "FULL", 
     "entityResults": [ 
      { 
      "entity": { 
       "key": { 
       "partitionId": { 
        "projectId": "project-id-5200707080506492774" 
       }, 
       "path": [ 
        { 
        "kind": "Test", 
        "id": "5634472569470976" 
        } 
       ] 
       }, 
       "properties": { 
       "test": { 
        "stringValue": "Hi it is me" 
       } 
       } 
      }, 
      "cursor": "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA1 
        MDY0OTI3NzRyEQsSBFRlc3QYgICAgN6QgQoMGAAgAA==", 
      "version": "1503343869436000" 
     }, 
     { 
     "entity": { 
      "key": { 
      "partitionId": { 
      "projectId": "project-id-5200707080506492774" 
     }, 
     "path": [ 
      { 
      "kind": "Test", 
      "id": "5639445604728832" 
      } 
     ] 
     }, 
     "properties": { 
     "test": { 
      "stringValue": "testtesttest" 
     } 
     } 
    }, 
    "cursor": "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA1MDY0OTI3NzRyEQsSBFRlc3QYgICAgLyhggoMGAAgAA==", 
    "version": "1503343008992000" 
    }, 
    { 
    "entity": { 
     "key": { 
     "partitionId": { 
      "projectId": "project-id-5200707080506492774" 
     }, 
     "path": [ 
      { 
      "kind": "Test", 
      "id": "5649391675244544" 
      } 
     ] 
     }, 
     "properties": { 
     "test": { 
      "stringValue": "testtest" 
     } 
     } 
    }, 
    "cursor": "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA1MDY0OTI3NzRyEQsSBFRlc3QYgICAgPjChAoMGAAgAA==", 
    "version": "1503342946693000" 
    }, 
    { 
    "entity": { 
     "key": { 
     "partitionId": { 
      "projectId": "project-id-5200707080506492774" 
     }, 
     "path": [ 
      { 
      "kind": "Test", 
      "id": "5659313586569216" 
      } 
     ] 
     }, 
     "properties": { 
     "test": { 
      "stringValue": "testtesttest" 
     } 
     } 
    }, 
    "cursor": "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA1MDY0OTI3NzRyEQsSBFRlc3QYgICAgNrjhgoMGAAgAA==", 
    "version": "1503343059530000" 
    }, 
    { 
    "entity": { 
     "key": { 
     "partitionId": { 
      "projectId": "project-id-5200707080506492774" 
     }, 
     "path": [ 
      { 
      "kind": "Test", 
      "id": "5715999101812736" 
      } 
     ] 
     }, 
     "properties": { 
     "test": { 
      "stringValue": "hello world" 
     } 
     } 
    }, 
    "cursor": "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA1MDY0OTI3NzRyEQsSBFRlc3QYgICAgLzVkwoMGAAgAA==", 
    "version": "1503343819165000" 
    } 
], 
"endCursor": "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA1MDY0OTI3NzRyEQsSBFRlc3QYgICAgLzVkwoMGAAgAA==", 
"moreResults": "NO_MORE_RESULTS" 
    } 
} 

Edit:

J'ai terminé une requête de filtre pour vérifier contre mon champ de test, comme l'a demandé et obtenu le moins de 200 réponses:

{ 
    "batch": { 
    "entityResultType": "FULL", 
    "entityResults": [ 
     { 
     "entity": { 
      "key": { 
      "partitionId": { 
       "projectId": "project-id-5200707080506492774" 
      }, 
      "path": [ 
       { 
       "kind": "Test", 
       "id": "5715999101812736" 
       } 
      ] 
      }, 
      "properties": { 
       "test": { 
       "stringValue": "hello world" 
      } 
      } 
      }, 
     "cursor": 
       "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA 
       1MDY0OTI3NzRyEQsSBFRlc3QYgICAgLzVkwoMGAAgAA==", 
      "version": "1503343819165000" 
     } 
    ], 
     "endCursor": "CjsSNWogc35wcm9qZWN0LWlkLTUyMDA3MDcwODA1MDY0OTI3NzRyEQsSBFRlc3QYgICAgLzVkwoMGAAgAA==", 
"moreResults": "NO_MORE_RESULTS" 
    } 
} 
+1

Avez-vous une entité '' test' avec id' '5634472569470976' et aucun ancêtre? –

+1

La requête semble correcte. Est-ce que ** id ** est une propriété de l'entité ou essayez-vous d'effectuer une recherche par clé d'entité? Si ** id ** est en fait une propriété, quel est le type de données? Il suffit de regarder les données (5634472569470976), il semble qu'il peut être un entier, mais le filtre recherche un type de chaîne. S'il vous plaît vérifier/confirmer. –

+0

J'ai ajouté ma structure de données d'une requête de type à mon message original. Dites que je veux tirer entité 5634472569470976 par son ID. Comment puis-je filtrer par sa clé lorsque l'API ne me laisse filtrer que par propriétés? Ai-je besoin d'ajouter un champ d'identification séparé juste pour que je puisse tirer par un ID? –

Répondre

1

Au moins dans la bibliothèque ndb python datastore id n'est pas autorisé en tant que nom de propriété. Ce qui pourrait être la raison pour laquelle votre requête ne fonctionne pas (comme vous l'attendez) non plus.

Après tout ce que vous ne voyez pas la propriété du nom id dans les structures properties de vos entités, il est en fait une partie de la key - la structure>path.

Juste pour confirmer, essayez d'utiliser une propriété valide (c.-à-un dont l'adresse figure properties), par exemple:

"filter": { 
    "propertyFilter": { 
     "property": { 
      "name": "test" 
     }, 
     "op": "EQUAL", 
     "value": { 
      "stringValue": "hello world" 
     } 
    } 
} 

Si vous avez les entités clés ids vous n'avez pas besoin d'effectuer des requêtes pour obtenir les entités (vous ne pouvez même pas être autorisé à le faire dans les transactions), vous pouvez directement tirer les entités par des clés, en utilisant le projects.lookup method. Je pense quelque chose le long de ces lignes:

{ 
    "keys": [ 
     { 
      "path": [ 
       { 
        "kind": "Test", 
        "id": "5634472569470976" 
       } 
      ] 
     } 
    ], 
} 
+0

Oui, j'ai eu un résultat de 200 succès, ajouté à mon post original.Alors, comment puis-je effectuer une transaction si je sais que c'est l'ID de l'entité dans le chemin clé, mais rien d'autre? Est-ce que j'utilise la bonne méthode, ou ai-je besoin de créer des ID personnalisés ou quelque chose? –

+1

Voir la réponse mise à jour. –

+0

Merci, Dan! Je me suis dit qu'il me manquait quelque chose. –