0

J'utilise Google Cloud Datastore et les entités stockées avec succès.Banque de données: `SELECT * FROM Entité WHERE la propriété IS NULL` ne renvoie aucun résultat malgré les entités sans propriété

Maintenant, j'essaie de les interroger en fonction de la présence d'une propriété. -je utiliser la « Requête par GQL » onglet dans l'interface utilisateur Datastore: https://console.cloud.google.com/datastore/entities/query/gql

Pour certaines entités, je n'ai pas précisé la propriété property quand je les ai sauvés, donc j'attendre à ce qu'ils soient mis à NULL. Toutefois, lorsque je demande SELECT * FROM Entity WHERE property IS NULL, aucun résultat n'est renvoyé.

Répondre

2

Cela fonctionne comme prévu:

Selon le Datastore documentation:

NULL est une valeur, et non l'absence d'une valeur. Il n'existe aucun moyen de déterminer si une entité n'a pas de valeur pour une propriété (c'est-à-dire si la propriété n'a aucune valeur). Si vous utilisez une condition du formulaire nonexistent = NULL, ce qui se produit est une vérification si une valeur null est explicitement stockée pour cette propriété. Par exemple, SELECT * FROM Task WHERE nonexistent = NULL ne donnera jamais une entité sans valeur définie pour la propriété nonexistent.

Donc, pour récupérer explicitement des entités avec property ensemble à NULL, vous devez stocker les property: NULL pour ces entités.

0

Ce que vous essayez d'atteindre n'est pas possible. NULL n'est pas la même chose que la propriété non présente.

Mais comme mentionné par Nick Johnson here,

La solution serait de fournir une valeur par défaut de la propriété mise à jour et une requête pour cette valeur

Je ne l'ai pas essayé personnellement , et je ne suis pas sûr que cela fonctionne, mais je vous suggère d'essayer cela. Si cela ne fonctionne pas, la seule autre option est de parcourir tous les enregistrements du modèle et de mettre à jour toutes les entités existantes qui n'ont pas de valeur, avec une valeur par défaut.