2016-01-16 3 views
1

У меня есть данные, как показано ниже:Найти последний элемент в массиве

{ 
"_id" : ObjectId("569a5328c5905e1b08113987"), 
"dataId" : "003f2d9c0b9b0f047df458b78a12404a", 
"dataSensors" : [ 
    { 
     "IoTserial" : "7ee042ad9d01e3e53c1b05d8923ce2ec", 
     "dateMesure" : "2016-01-16 15:51:41", 
     "value" : "0.47" 
    }, 
{ 
     "IoTserial" : "aaa042ad9d0aaaaaa1b05d8923ce2aa", 
     "dateMesure" : "2016-01-16 15:51:40", 
     "value" : "15.66" 
    }, 
    { 
     "IoTserial" : "7ee042ad9d01e3e53c1b05d8923ce2ec", 
     "dateMesure" : "2016-01-16 15:51:40", 
     "value" : "15.66" 
    }, 
    { 
     "IoTserial" : "7ee042ad9d01e3e53c1b05d8923ce2ec", 
     "dateMesure" : "2016-01-16 15:51:42", 
     "value" : "10.15" 
    } 
], 
"statusFlag" : "POI"} 

Когда я использую

db.collection.find({dataId:"003f2d9c0b9b0f047df458b78a12404a"},{dataSensors:{$elemMatch:{IoTserial:"7ee042ad9d01e3e53c1b05d8923ce2ec"}}}) 

возвращает первый элемент из серии,

{ 
"_id" : ObjectId("569a5328c5905e1b08113987"), 
"dataSensors" : [ 
    { 
     "IoTserial" : "7ee042ad9d01e3e53c1b05d8923ce2ec", 
     "dateMesure" : "2016-01-16 15:51:41", 
     "value" : "0.47" 
    } 
]} 

но мне нужен последний элемент с «значением»: «10.15»

Запомнился

+0

Возможный дубликат [с помощью оператора $ ломтика, чтобы получить последний элемент массива в MongoDB] (HTTP://stackoverflow.com/questions/21952005/using-slice-operator-to-get-last-element-of-array-in-mongodb) – Idos

ответ

2

Вы используете find.

Второй аргумент find не является query, но a projection.

Использование find с single query condition в query и $slice: -1 в projection, чтобы получить последний элемент массива:

db.collection.find({ 
    dataId:"003f2d9c0b9b0f047df458b78a12404a", 
    "dataSensors.IoTserial":"7ee042ad9d01e3e53c1b05d8923ce2ec" 
}, 
{ 
    dataSensors:{ 
    $slice: -1 
    } 
}); 
+0

Да! Это то, что я искал. Спасибо большое –

Смежные вопросы