Как уменьшить коллекцию, сохранив только точки изменения?
У меня есть коллекция образцов ниже. Эти данные извлекаются из конечной точки каждые двадцать минут на задании 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 для получения дополнительной информации.