Как каждый получает количество строк в модели Datastore в Google App Engine?

У меня есть возможное объяснение использования улиц без грузовиков в моем примере, хотя я не уверен, что это правильно.

Вот снимок города, выпущенного карты без грузовиков зон с маршрутом, выделенным мной: enter image description here

Оказывается, нет никакого способа добраться туда без использования улиц без грузовиков. Я не проверил все записи улиц в MapCreator, но многие обозначены как не грузовики.

Должна ли маршрутизация работать таким образом, если она потерпела неудачу? Это все еще не отвечает очень немногим указаниям без грузовика на карте?

25
задан Ryan A. 18 April 2018 в 16:21
поделиться

5 ответов

Вы должны использовать Статистика хранилища данных :

Query query = new Query("__Stat_Kind__");
query.addFilter("kind_name", FilterOperator.EQUAL, kind);       
Entity entityStat = datastore.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");

Обратите внимание, что вышеприведенное не работает в хранилище данных разработки, но работает в производственном режиме (после публикации).

Я вижу, что это старый пост, но я добавляю ответ в пользу тех, кто ищет то же самое.

18
ответ дан TommyN 28 November 2019 в 20:33
поделиться
count = modelname.all(keys_only=True).count(some_upper_limit)

Просто чтобы добавить к предыдущему сообщению от dar, нужно указать этот 'some_upper_limit'. Если нет, то счетчик по умолчанию все равно будет максимум 1000.

8
ответ дан tkc 28 November 2019 в 20:33
поделиться

В GAE счетчик всегда заставит вас просмотреть результаты, если у вас есть более 1000 объектов. Самый простой способ решить эту проблему - добавить свойство счетчика в вашу модель или в другую таблицу счетчиков и обновлять его каждый раз, когда вы создаете новый объект.

6
ответ дан Federico Builes 28 November 2019 в 20:33
поделиться
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Query query = new Query("__Stat_Kind__");
Query.Filter eqf = new Query.FilterPredicate("kind_name",
                                Query.FilterOperator.EQUAL,
                                "SomeEntity");
query.setFilter(eqf);
Entity entityStat = ds.prepare(query).asSingleEntity();
Long totalEntities = (Long) entityStat.getProperty("count");
1
ответ дан varun 28 November 2019 в 20:33
поделиться

Начиная с версии 1.3.6, ограничение количества запросов больше 1000. Таким образом, вы можете сделать следующее, чтобы получить число, превышающее 1000:

count = modelname.all(keys_only=True).count()

Это подсчитает всех ваших сущностей, что может быть довольно медленным, если у вас есть большое количество сущностей. В результате вам следует подумать о вызове count () с определенным ограничением:

count = modelname.all(keys_only=True).count(some_upper_bound_suitable_for_you)
13
ответ дан David Underhill 28 November 2019 в 20:33
поделиться