If you never add anything to the contents of the list in the repeated property, no value will be sent, and the property will display as <missing> not as <null>
According to the App Engine documentation on Queries and Indexes, there is a distinction between objects that do not have a value for a property and those that have a value of zero; and
Objects without a filtered property are never returned by the query.
Therefore, it is not possible to write a query for these old records.
See the rest of the answer above at the AppEngine site : query data store for records with <missing> value
If you want to be able to query such things, you must apply this in your data model. For example, you might have ndb.ComputedProperty , which is a boolean corresponding to whether the desired list has zero, for example,
class MyModel(ndb.Model): my_repeat = ndb.StringProperty(repeated=True) sentinel = ndb.ComputedProperty(lambda self: len(self.my_repeat) == 0)
and to query for these missing values you can use
MyModel.query(MyModel.sentinel == True)
If you have an existing set of such objects in your data warehouse, you can run mapreduce once on them and simply retrieve each using the updated model definition, and then put everything back into the data warehouse. This will keep all existing properties the same and update using the sentinel value.
source share