Как уменьшить коллекцию, сохранив только точки изменения?

У меня есть коллекция образцов ниже. Эти данные извлекаются из конечной точки каждые двадцать минут на задании cron.

{"id":AFFD6,"empty":8,"capacity":15,"ready":6,"t":1474370406,"_id":"kROabyTIQ5eNoIf1"}
    {"id":AFFD6,"empty":9,"capacity":15,"ready":5,"t":1474116005,"_id":"kX0DpoZ5fkMr2ezg"}
    {"id":AFFD6,"empty":9,"capacity":15,"ready":5,"t":1474684808,"_id":"ken1WRN47PTW159H"}
    {"id":AFFD6,"empty":9,"capacity":15,"ready":5,"t":1474117205,"_id":"kes1gDlG1sBjgV1R"}
    {"id":AFFD6,"empty":10,"capacity":15,"ready":4,"t":1474264806,"_id":"khILUjzGEPOn0c2P"}
    {"id":AFFD6,"empty":9,"capacity":15,"ready":5,"t":1474275606,"_id":"ko9r8u860es7E2hI"}
    {"id":AFFD6,"empty":9,"capacity":15,"ready":5,"t":1474591207,"_id":"kpLS6mCtkIiffTrN"}

Я хочу отменить любой документ (строку), который не показывает изменения в empty (и следовательно ready). Моя цель - найти самую последнюю временную отметку, где эти значения изменились в этой коллекции.

Лучше проиллюстрировать, я хочу уменьшить его до значений, которые меняются как таковые

{"id":AFFD6,"empty":8,"capacity":15,"ready":6,"t":1474370406,"_id":"kROabyTIQ5eNoIf1"}
{"id":AFFD6,"empty":9,"capacity":15,"ready":5,"t":1474117205,"_id":"kes1gDlG1sBjgV1R"}
{"id":AFFD6,"empty":10,"capacity":15,"ready":4,"t":1474264806,"_id":"khILUjzGEPOn0c2P"}
{"id":AFFD6,"empty":9,"capacity":15,"ready":5,"t":1474591207,"_id":"kpLS6mCtkIiffTrN"}

Могу ли я сделать это в запросе MongoDB? Или мне лучше с функцией фильтра JavaScript?

1 ответ

Решение

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

Используйте следующий код, чтобы сделать уникальный

db.collection.createIndex( { "id": 1 }, { unique: true } )

Также обратитесь к документации MongoDB для получения дополнительной информации.

Другие вопросы по тегам