MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mise à jour de Nested Array Mongoose

Vous voudrez peut-être repenser votre modèle de données. Dans l'état actuel des choses, vous ne pouvez pas accomplir ce que vous voulez. Le champ des capteurs fait référence à un tableau. Dans le format de document idéal que vous avez fourni, vous avez un seul objet à l'intérieur de ce tableau. Ensuite, à l'intérieur de cet objet, vous avez deux champs avec exactement la même clé. Dans un objet JSON, ou un document mongo dans ce contexte, vous ne pouvez pas avoir de clés en double dans le même objet.

Ce que vous recherchez ici n'est pas clair, mais il serait peut-être préférable d'opter pour quelque chose comme ceci :

{
"_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 c'est ce que vous voulez, vous pouvez essayer ceci :

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

Et en passant, si vous ne stockez qu'une seule chaîne dans chaque objet du tableau de mesures, vous souhaiterez peut-être simplement stocker les valeurs réelles au lieu de l'objet entier { time: "value" } . Vous trouverez peut-être les données plus faciles à gérer de cette façon.