sql >> Database teknologi >  >> NoSQL >> MongoDB

Opdatering af Nested Array Mongoose

Du vil måske genoverveje din datamodel. Som det er i øjeblikket, kan du ikke opnå det, du ønsker. Sensorfeltet refererer til et array. I det ideelle dokumentformat, som du har angivet, har du et enkelt objekt inde i det array. Så inde i det objekt har du to felter med nøjagtig den samme nøgle. I et JSON-objekt eller mongo-dokument i denne sammenhæng kan du ikke have dublerede nøgler i det samme objekt.

Det er ikke klart, præcis hvad du leder efter her, men måske ville det være bedst at gå efter noget som dette:

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

Hvis dette er, hvad du vil, så kan du prøve dette:

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

Og som en sidebemærkning, hvis du kun skal gemme en enkelt streng i hvert objekt i målearrayet, vil du måske bare gemme de faktiske værdier i stedet for hele objektet { time: "value" } . Du vil måske finde dataene nemmere at håndtere på denne måde.



  1. Mongoose, opdater værdier i række af objekter

  2. MongoDB :hvordan man indstiller et nyt felt svarende til værdien af ​​et andet felt for hvert dokument i en samling

  3. Find objekter mellem to datoer MongoDB

  4. Ændring af Redis-port i Docker Compose virker ikke