Название коллекций, которые у меня есть
1) Устройство: _id, deviceId (строка), deviceInfo, companyId (строка)
2) Мобильный телефон: _id, companyId (строка), tagId (строка), mobileInfo
3) Отслеживание: _id, DeviceID (строка), TagID (строка), trackInfo, метка времени (в миллисекундах * 1039) *)
Мне нужно создать запрос, чтобы получить все данные отслеживания (с мобильными данными и данными устройства) данного companyId. Каждая компания имеет:
- Одна или несколько мобильных данных с различным tagId.
- Одна или несколько данных устройства с deviceId.
- Одна или несколько данных отслеживания, идентифицированных TagID и DeviceID.
Окончательный результат должен содержать поля, перечисленные ниже: DeviceID, deviceInfo, companyId, TagID, mobileInfo, trackInfo, Timestamp.
Условие, применяемое к запросу:
Отслеживающие коллекции могут иметь документы каждую секунду, бывают случаи, когда все поля одинаковы (за исключением того, что метка времени отличается на 1 сек c). Я не хочу, чтобы эти избыточно выглядящие документы, для достижения этой цели, мы можем использовать условие как: Если соседние строки конечных результатов одинаковы с разницей их отметки времени или без нее, то разница меньше 1 se c, тогда одна из строк не должна быть в конечном результате. У меня есть работа запрос, который будет возвращать документы с полями выше, но для поведения избыточности я проверил после применения запроса, используя l oop для документов, возвращаемых запросом, как показано ниже. Теперь мне нужно реализовать следующие логи c для самого запроса.
Примечание : отслеживание коллекций имеет миллионы документов, поэтому остерегайтесь запроса, который может повлиять на производительность.
// grid is the array of documents returned by mongodb using query.
for (var k=1;k<grid.length;){
var a=Number(grid[k].Timestamp);
var b=Number(grid[k-1].Timestamp)
if ((Math.abs(a - b)<(1000)) && grid[k].TagID===grid[k-1].TagID && grid[k].DeviceID===grid[k-1].DeviceID){
grid.splice(k, 1);
}
else{
k++;
}
}
for (var k=1;k<grid.length-1;){
if ((grid[k].DeviceID===grid[k-1].DeviceID && grid[k].TagID===grid[k-1].TagID) && (grid[k].DeviceID===grid[k+1].DeviceID && grid[k].TagID===grid[k+1].TagID)){
grid.splice(k, 1);
}
else{
k++;
}
}