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

Como postar dados do MongoDB no array aninhado usando NODE.js e Express


Você pode usar o Model.prototype.update em mangusto para atualizar o subdocumento timings .

No entanto, existem dois cenários -
  1. Se você quiser enviar entradas sem a necessidade de verificar duplicatas, use $push operador
    var filter = {
        _id: mongoose.Types.ObjectId('<USER_ID>')
    };
    
    var update = {
        $push: {
            timings: {
                startTime: "",
                endTime: "",
                elapsedTime: ""
            }
        }
    };
    
    db.collection.update(filter, update);
  1. Se você quiser enviar apenas entradas distintas, use $addToSet operador
    var filter = {
        _id: mongoose.Types.ObjectId('<USER_ID>')
    };
    
    var update = {
        $addToSet: {
            timings: {
                startTime: "",
                endTime: "",
                elapsedTime: ""
            }
        }
    };
    
    db.collection.update(filter, update);

Nota:Requer mongoose primeiro
const mongoose = require('mongoose');

Corrija seu código para o abaixo, você também não pode obter o ID exato do subdocumento, mas pode obter o documento raiz atualizado -
const updatedUser = await User.findOneAndUpdate({
        _id: mongoose.Types.ObjectId(req.body._id)
    },
    {
        $addToSet: {
            timings: {
                startTime, 
                endTime, 
                elapsedTime
            }
        }
    }, {
        new: true
    }).exec();