获取数组中的第一个嵌入式文档

时间:2018-12-12 17:10:19

标签: mongodb mongodb-query aggregation-framework

我试图获取文档数组的第一个元素。如您所见,“ primera”字段为空:

{
"_id" : ObjectId("5bb164d71d2eef353d292cab"),
"asunto" : {
    "id" : "5b48bb7251b997b3cc23b9e4",
    "abreviatura" : "AF",
    "titulo" : "Alarma Fuente",
    "descripcion" : "Alarma generada por un evento de energía en la fuente."
},
"tiempos" : [
    {
        "cola" : "5b55f8a351b9979f1e417b43",
        "inicio" : 1538352343,
        "fin" : 1538353214,
        "total" : 871,
        "usuario" : {
            "id" : 0,
            "usuario" : "MOICA"
        }
    }
],
"pFecha" : "2018-09-30",
"primera" : [ ]

}

我的查询是:

var start = ISODate("2018-10-01T00:00:00.000Z");
var end = ISODate("2018-10-01T23:59:59.000Z");

db.moicaTickets.aggregate([

    { $match : { asunto:{$exists:true}, asunto: {$ne:null},tiempos:{$exists:true}, tiempos: {$ne:null},creado:{$exists:true}, "creado.lastEvent_tc": { $gt: start, $lt: end } }},
    { $project: { pFecha: { $dateToString: { format: "%Y-%m-%d", date: "$creado.lastEvent_tc", timezone: "-03:00" } }, asunto: 1, tiempos: 1, primera: "$tiempos.0"}}

         ]).pretty()

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用$arrayElemAt从数组中获取任何索引元素

db.collection.aggregate([
  { "$project": {
    "pFecha": {
      "$dateToString": {
        "format": "%Y-%m-%d",
        "date": "$creado.lastEvent_tc",
        "timezone": "-03:00"
      }
    },
    "asunto": 1,
    "tiempos": 1,
    "primera": { "$arrayElemAt": ["$tiempos",0]}
  }}
])