sql >> Base de Datos >  >> NoSQL >> MongoDB

Actualización de Mongoose de matriz anidada

Es posible que desee repensar su modelo de datos. Tal como está actualmente, no puedes lograr lo que quieres. El campo de sensores se refiere a una matriz. En el formato de documento ideal que ha proporcionado, tiene un solo objeto dentro de esa matriz. Luego, dentro de ese objeto, tienes dos campos con exactamente la misma clave. En un objeto JSON, o documento mongo en este contexto, no puede tener claves duplicadas dentro del mismo objeto.

No está claro exactamente lo que está buscando aquí, pero tal vez sería mejor optar por algo como esto:

{
"_id" : "Manasa",
"name" : "Manasa Sub",
"sensors" : [ 
    {
    "sensor_name" : "ras",
    "_id" : ObjectId("57da0a4bf3884d1fb2234c74"),
    "measurements" : [ 
        {
            "time" : "8:00"
        },
        {
            "time" : "9:00"
        }
    ]
},
{
    // next sensor in the sensors array with similar format
    "_id": "",
    "name": "",
    "measurements": []
}],
}

Si esto es lo que quieres, entonces puedes probar esto:

User.findOneAndUpdate(
    {  _id:req.body._id "sensors.sensor_name": req.body.sensor_name },
    { $push: { "sensors.0.measurements": { "time": req.body.time } } }
);

Y como nota al margen, si solo va a almacenar una sola cadena en cada objeto en la matriz de medidas, es posible que desee almacenar los valores reales en lugar del objeto completo { time: "value" } . Puede encontrar los datos más fáciles de manejar de esta manera.