sql >> Database >  >> NoSQL >> MongoDB

Geneste Array Mongoose bijwerken

Misschien wilt u uw gegevensmodel heroverwegen. Zoals het nu is, kun je niet bereiken wat je wilt. Het veld sensoren verwijst naar een array. In het ideale documentformaat dat je hebt opgegeven, heb je een enkel object binnen die array. Dan heb je binnen dat object twee velden met exact dezelfde sleutel. In een JSON-object, of mongo-document in deze context, kunt u geen dubbele sleutels binnen hetzelfde object hebben.

Het is niet precies duidelijk wat je hier zoekt, maar misschien kun je het beste voor zoiets gaan:

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

Als dit is wat je wilt, kun je dit proberen:

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

En als een kanttekening, als je maar één string in elk object in de meetreeks gaat opslaan, wil je misschien gewoon de werkelijke waarden opslaan in plaats van het hele object { time: "value" } . Misschien vindt u de gegevens op deze manier gemakkelijker te verwerken.



  1. Is het mogelijk om cast-gegevens in een aggregatiepijplijn op MongoDB te typen?

  2. Mongos installeren/instellen in elastische bonenstaak

  3. Mongoose - met behulp van Populate op een array van ObjectId

  4. MongoDB $exp