找到数组中的最后一个元素

时间:2016-01-16 16:20:23

标签: mongodb

我有以下数据:

{
"_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"
    }
]}

但我需要最后一个元素" value" :" 10.15"

提前致谢

1 个答案:

答案 0 :(得分:2)

您未正确使用find

find的第二个参数不是query,而是projection

findquery中的single query conditionprojection中的$slice: -1一起使用,以获取数组的最后一个元素:

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