MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualizando Matriz Aninhada Mongoose


Você pode querer repensar seu modelo de dados. Como está atualmente, você não pode realizar o que deseja. O campo de sensores refere-se a um array. No formato de documento ideal que você forneceu, você tem um único objeto dentro dessa matriz. Então, dentro desse objeto, você tem dois campos com exatamente a mesma chave. Em um objeto JSON ou documento mongo nesse contexto, você não pode ter chaves duplicadas no mesmo objeto.

Não está claro exatamente o que você está procurando aqui, mas talvez seja melhor ir para algo assim:
{
"_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": []
}],
}

Se é isso que você quer, então você pode tentar isso:
User.findOneAndUpdate(
    {  _id:req.body._id "sensors.sensor_name": req.body.sensor_name },
    { $push: { "sensors.0.measurements": { "time": req.body.time } } }
);

E como uma observação lateral, se você for armazenar apenas uma única string em cada objeto na matriz de medições, convém armazenar apenas os valores reais em vez de todo o objeto { time: "value" } . Você pode achar os dados mais fáceis de manipular dessa maneira.