Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取MongoDb中嵌入文档的子数组中的最后一项_Mongodb_Aggregate - Fatal编程技术网

获取MongoDb中嵌入文档的子数组中的最后一项

获取MongoDb中嵌入文档的子数组中的最后一项,mongodb,aggregate,Mongodb,Aggregate,我正在努力通过查询获取嵌入文档子数组中的最后一项 我的文档结构与此类似: > id : ObjectId("5e2984660f596903a9733622") Poliza :OBJECT _id Poliza DatosPoliza IdPoliza Siniestro:OBJECT _id

我正在努力通过查询获取嵌入文档子数组中的最后一项

我的文档结构与此类似:

    > id : ObjectId("5e2984660f596903a9733622")
        Poliza :OBJECT
            _id
            Poliza
                DatosPoliza
                         IdPoliza 
        Siniestro:OBJECT
            _id
            Siniestro
                SituacionesSiniestro
                    0. fechaSituacion
                       situacionSiniestro
                    1. fechaSituacion
                       situacionSiniestro
我需要匹配Poliza中的以下键值(使用过滤器):

同时获取Siniestro中数组中的最后一项。 我通过以下查询获得了它,在我仅使用Siniestro对象结构创建的新集合中,只是为了确保聚合工作正常:

    db.sim.aggregate([{$unwind:"$Siniestro.SituacionesSiniestro"},{$sort:{"Siniestro.SituacionesSiniestro.fechaSituacion":-1}},{$limit:1},{$group:{_id:"$_id","situaciones":{$push:"$Siniestro.SituacionesSiniestro"}}},{$project:{"Siniestro.SituacionesSiniestro":"$situaciones"}}])
我的观点是,这些查询彼此独立工作。但是我需要在同一个集合中执行它,使用匹配项进行过滤,并使用第二个大查询来获取Siniestro.situacionesiniestro.fechaSituacion中的最后一项

你能帮我吗


文档模型

{"_id":{"$oid":"5e2984660f596903a9733622"},
    "Poliza":{"DuracionPoliza":"RE",
       "DatosSuspensiones":{"Suspension":{"NumeroOrden":{"$numberInt":"1"},
                            "Motivo":"ER",
                            "FechaSuspension":"2013-01-01",
                            "FechaReactivacion":"2013-01-01"}},
       "DatosAnulacion":{"MotivoAnulacion":"","FechaAnulacion":"","DetalleAnulacion":""},
       "Fechas":{"FechaEfectoInicial":{"$date":{"$numberLong":"1095897600000"}},
                 "FechaSituacion":"2019-08-20","FechaEmision":"2004-09-23",
                 "FechaVencimiento":"2020-09-23","FechaEfectoActual":{"$date":{"$numberLong":"1569196800000"}}},
       "DatosRiesgos":{"Riesgo":
                              {"FechaFin":"2020-09-23",
                              "FechaInicio":"2019-09-23",
                              "NumeroOrden":{"$numberInt":"1"},
                              "DescripcionRiesgo":"CL VER HOJAS ENEXAS   4 1 08024 BARCELONA",
                      "RiesgoHogar":{"SituacionRiesgo":{"NombreVia":"VER HOJAS ENEXAS","Poblacion":"BARCELONA","CodigoPostal":{"$numberInt":"8024"},"ClaseVia":"CL"," ":{"$numberInt":"8"},"OtrosDatosVia":" "},
                                     "ClaseInmueble":"UU","UsoInmueble":"HA"},
                      "DatosCoberturas":{"Cobertura":[{"FechaFin":"2020-09-23","IdCobertura":"073010000","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"1"},
                                         "DescripcionCobertura":"RESPONSABILIDAD CIVIL","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073013000","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"2"},
                                         "DescripcionCobertura":"ASISTENCIA JURIDICA","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073016001","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"3"},
                                         "DescripcionCobertura":"INCENDIO CONTINENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073016002","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"4"},
                                         "DescripcionCobertura":"AGUA CONTINENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073016003","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"5"},
                                         "DescripcionCobertura":"ROTURAS CONTINENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073016004","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"6"},
                                         "DescripcionCobertura":"ROBO CONTINENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073016006","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"7"},
                                         "DescripcionCobertura":"DANOS ESTETICOS CONTINENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073016226","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"8"},
                                         "DescripcionCobertura":"DA�OS ELECTRICOS CONTINENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073016253","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"9"},
                                         "DescripcionCobertura":"ATMOSFERICOS CONTINENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073018019","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"10"},
                                         "DescripcionCobertura":"CONSORCIO DA�OS","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073018262","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"11"},
                                         "DescripcionCobertura":"CONSORCIO PERDIDA BENEFICIOS","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073311000","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"12"},
                                         "DescripcionCobertura":"ASISTENCIA URGENTE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073312000","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"13"},
                                         "DescripcionCobertura":"ASIST REPARACIONES Y BRICOLAJE","CapitalAsegurado":{"$numberInt":"0"}},{"FechaFin":"2020-09-23","IdCobertura":"073313000","FechaInicio":"2019-09-23","NumeroOrden":{"$numberInt":"14"},
                                         "DescripcionCobertura":"ASISTENCIA FAMILIAR","CapitalAsegurado":{"$numberInt":"0"}}]}}},
        "DatosPoliza":{"DatosMediador":{"ClaseMediador":"CO","IdMediador":{"CodigoInterno":{"$numberInt":"5266433"}},"NombreMediador":"INTEGRACI�N PLATAFORMA DE CORREDORES, S.L."},
                       "NumeroSuplemento":{"$numberInt":"16"},
                       "CodigoEntidad":{"CodigoDGS":"C0058","CodigoInterno":"C0058"},
                       "IdPoliza":"BB-0730480328111",
                       "DatosRamo":{"DescripcionModalidad":"B00-HOGAR FAMILIAR","RamoDGS":{"$numberInt":"2151"},"RamoEntidad":{"$numberInt":"73"},"ModalidadRamo":"073B00","DescripcionRamo":"RAMO COMBINADO HOGAR"}},
        "OrigenesContratacion":{"OrigenContratacion":{"CodigoCentro":{"$numberInt":"9999999"},"NumeroOrden":{"$numberInt":"1"},"DescripcionClase":"OTROS","ClaseContratacion":"OT"}},
        "IdProceso":{"$numberInt":"13121"},
        "DatosImportes":{"Importes":{"PrimaTotal":{"$numberDouble":"603.18"},"DatosCargos":{"Cargo":[{"Importe":{"$numberDouble":"20.29"},"NumeroOrden":{"$numberInt":"1"},"ClaseCargo":"CO","DescripcionCargo":"Consorcio"},{"Importe":".83","NumeroOrden":{"$numberInt":"2"},"ClaseCargo":"CL","DescripcionCargo":"WWW"},{"Importe":{"$numberDouble":"32.94"},"NumeroOrden":{"$numberInt":"3"},"ClaseCargo":"IP","DescripcionCargo":"IPS"}]},"DatosMoneda":{"Moneda":"EUR","FechaCambio":"1900-01-01","TipoCambio":{"$numberInt":"0"}},"PrimaNeta":{"$numberDouble":"549.12"}}},
        "Version":"5.0","numRegistro":{"$numberInt":"1"},
        "IdLote":"1009991",
        "FraccionPago":"AN",
        "Tomador":{"PersonaFisica":{"IdPersona":"11111111T","Nombre":"VKHZXPQX","FechaNacimiento":"1966-03-04","Idioma":"es","Apellido2":"FZVXKXDZZ","Apellido1":"PZVZZ","TipoIdentificacion":"NI","EstadoCivil":"CA","Domicilio":{"NombreVia":"MOISES DE MOISES","Poblacion":"LEON","CodigoPostal":{"$numberInt":"24006"},"ClaseVia":"CL","CALLE":{"$numberInt":"24"},"Pais":"ESP","OtrosDatosVia":"38     6C"},"Sexo":"HO"}},
        "ClasePoliza":"NP","SituacionPoliza":"EV"},
    "Siniestro":[{"_id":{"$oid":"5e662302b6cf1f3607cdd78b"},
    "SituacionesSiniestro":[{"fechaSituacion":{"$date":{"$numberLong":"1583017200000"}},"situacionSiniestro":"AP"},
                            {"fechaSituacion":{"$date":{"$numberLong":"1583276400000"}},"situacionSiniestro":"PERITO"}],
    "IdSiniestroEntidad":"M0835/2020",
    "Convenios":[{"Convenio":"AS","numeroOrden":{"$numberDouble":"1"}}],
    "DanosSiniestro":[{"DescripcioDano":"pintura","ValorDano":{"$numberDouble":"3000"},"NumeroOrden":{"$numberDouble":"1"},"EstadoDano":"PERITADO"}],
    "Reserva":[{"DescripcioReversa":"mano de obra","ImporteReserva":{"$numberDouble":"180"}},{"DescripcioReversa":"material","ImporteReserva":{"$numberDouble":"42"}}],
    "DescripcioSiniestro":"Accidente","FechaDeclaracion":{"$date":{"$numberLong":"1551398400000"}},
    "FechaOcurrencia":{"$date":{"$numberLong":"1551398400000"}}}]}      

以下聚合查询获取
situacionesiniestro
子数组(在数组
Siniestro
中)的最后一个元素:

输出:

{
        "_id" : ObjectId("5e68a36f74da2d695db7957c"),
        "Siniestro" : {
                "SituacionesSiniestro" : [
                        {
                                "fechaSituacion" : {
                                        "$date" : {
                                                "$numberLong" : "1583276400000"
                                        }
                                },
                                "situacionSiniestro" : "PERITO"
                        }
                ]
        }
}

您可以将相同的聚合与匹配和筛选一起使用。由于您需要数组的最后一个元素,因此可以使用
$slice
聚合运算符。谢谢您的回答。问题是当我混合它们时,它不会返回结果。对于单独的文档,它们可以工作,但是我总共得到了0个文档,我要插入的文档是为了得到预期的结果,我的意思是它确实包含“Poliza.datopoliza.IdPoliza”:“BB-0730480328111”您可以将您用于测试的示例文档发布为JSON吗?是的。我在原来的帖子中添加了它。谢谢,很好。您希望输出的JSON是什么样子的?
“_id”:ObjectId(“5e68a36f74da2d695db7957c”)
看起来不同,因为我为测试的文档保存了不同的值。
db.collection.aggregate( [
  { $match: { "Poliza.DatosPoliza.IdPoliza" : "BB-0730480328111" } },
  { $unwind: "$Siniestro" },
  { $project: { "Siniestro.SituacionesSiniestro": { $slice: [ "$Siniestro.SituacionesSiniestro", -1 ] } } },
] )
{
        "_id" : ObjectId("5e68a36f74da2d695db7957c"),
        "Siniestro" : {
                "SituacionesSiniestro" : [
                        {
                                "fechaSituacion" : {
                                        "$date" : {
                                                "$numberLong" : "1583276400000"
                                        }
                                },
                                "situacionSiniestro" : "PERITO"
                        }
                ]
        }
}