MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Aktualisieren von Nested Array Mongoose

Vielleicht möchten Sie Ihr Datenmodell überdenken. So wie es derzeit ist, können Sie nicht erreichen, was Sie wollen. Das Sensorfeld bezieht sich auf ein Array. In dem von Ihnen bereitgestellten idealen Dokumentformat haben Sie ein einzelnes Objekt in diesem Array. Dann haben Sie in diesem Objekt zwei Felder mit genau demselben Schlüssel. In einem JSON-Objekt oder Mongo-Dokument in diesem Kontext können Sie keine doppelten Schlüssel innerhalb desselben Objekts haben.

Es ist nicht genau klar, wonach Sie hier suchen, aber vielleicht wäre es am besten, nach etwas wie diesem zu suchen:

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

Wenn Sie dies möchten, können Sie Folgendes versuchen:

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

Und als Nebenbemerkung, wenn Sie immer nur einen einzelnen String in jedem Objekt im Measurements-Array speichern, möchten Sie vielleicht nur die tatsächlichen Werte anstelle des gesamten Objekts speichern { time: "value" } . Möglicherweise finden Sie die Daten auf diese Weise einfacher zu handhaben.