Сервис не работает после того, как приложение убито на Android 8 Oreo [дубликат]

Существует несколько способов сделать это.

Первый из них - Операторы агрегирования даты , которые позволяют вам анализировать значения «даты» в документах. В частности, для «группировки» в качестве основного намерения:

db.collection.aggregate([
  { "$group": {
    "_id": {
      "year": { "$year": "$created_at" },
      "dayOfYear": { "$dayOfYear": "$created_at" },
      "hour": { "$hour": "$created_at" },
      "interval": {
        "$subtract": [ 
          { "$minute": "$created_at" },
          { "$mod": [{ "$minute": "$created_at"}, 15] }
        ]
      }
    }},
    "count": { "$sum": 1 }
  }}
])

Второй способ заключается в использовании небольшого трюка, когда объект даты вычитается (или другая прямая математическая операция) из другого объекта даты, тогда результатом является числовое значение, представляющее миллисекунду времени между двумя объектами. Таким образом, просто используя дату эпохи, вы получаете представление в миллисекундах эпохи. Затем используйте математику даты для интервала:

db.collection.aggregate([
    { "$group": {
        "_id": {
            "$subtract": [
                { "$subtract": [ "$created_at", new Date("1970-01-01") ] },
                { "$mod": [ 
                    { "$subtract": [ "$created_at", new Date("1970-01-01") ] },
                    1000 * 60 * 15
                ]}
            ]
        },
        "count": { "$sum": 1 }
    }}
])

. Это зависит от того, какой формат вывода вы хотите для интервала группировки. Оба они в основном представляют одно и то же и имеют достаточные данные для повторной конструкции в качестве объекта «даты» в вашем коде.

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


MongoDB 4.x и Upwards

Были некоторые дополнения к операторам агрегирования даты с момента написания оригинала, но из MongoDB 4.0 будет фактическое «реальное литье типов» в отличие от основных математических приемов, сделанных здесь с преобразованием даты BSON.

Для Например, мы можем использовать $toLong и $toDate в качестве новых помощников:

db.collection.aggregate([
  { "$group": {
    "_id": {
      "$toDate": {
        "$subtract": [
          { "$toLong": "$created_at" },
          { "$mod": [ { "$toLong": "$created_at" }, 1000 * 60 * 15 ] }
        ]
      }
    },
    "count": { "$sum": 1 }
  }}
])

Это немного короче и не требует определения внешняя BSON Дата для значения «epoch» как константа при определении конвейера, поэтому она вполне согласуется для всех языковых реализаций.

Это всего лишь два из «вспомогательных» методов преобразования типов, которые все привязываются к метод $convert , который является «более длинной» формой реализации, позволяющей выполнять пользовательскую обработку на null или ошибку в преобразовании.

Это возможно даже при таком литье получить информацию о Date из ObjectId первичного ключа, так как это было бы надежным источником даты создания:

db.collection.aggregate([
  { "$group": {
    "_id": {
      "$toDate": {
        "$subtract": [
          { "$toLong": { "$toDate": "$_id" }  },
          { "$mod": [ { "$toLong": { "$toDate": "_id" } }, 1000 * 60 * 15 ] }
        ]
      }
    },
    "count": { "$sum": 1 }
  }}
])

Таким образом, «типы литья» с таким преобразованием могут быть довольно мощным инструментом.

0
задан Markus Kauppinen 27 June 2019 в 06:39
поделиться

1 ответ

Если вы используете vivo / honor / oppo и т. Д., Ваши службы будут убиты, как только ваше приложение будет закрыто.

0
ответ дан Akhil Sudha 27 June 2019 в 06:39
поделиться
  • 1
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 2
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 3
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 4
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 5
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 6
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 7
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 8
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
  • 9
    Причиной Ваш пример является настолько неприятный взгляд isn' t, потому что RAII испорчен, скорее это - потому что Вам не удалось использовать его. Необработанные указатели не являются RAII. – Ben Voigt 27 April 2013 в 22:18
Другие вопросы по тегам:

Похожие вопросы: