MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment publier des données MongoDB dans le tableau imbriqué à l'aide de NODE.js et Express

Vous pouvez utiliser le Model.prototype.update en mangouste pour mettre à jour le sous-document timings .

Cependant, il existe deux scénarios -

  1. Si vous souhaitez envoyer des entrées sans avoir à vérifier les doublons, utilisez $push opérateur
    var filter = {
        _id: mongoose.Types.ObjectId('<USER_ID>')
    };
    
    var update = {
        $push: {
            timings: {
                startTime: "",
                endTime: "",
                elapsedTime: ""
            }
        }
    };
    
    db.collection.update(filter, update);
  1. Si vous souhaitez pousser uniquement des entrées distinctes, utilisez $addToSet opérateur
    var filter = {
        _id: mongoose.Types.ObjectId('<USER_ID>')
    };
    
    var update = {
        $addToSet: {
            timings: {
                startTime: "",
                endTime: "",
                elapsedTime: ""
            }
        }
    };
    
    db.collection.update(filter, update);

Remarque :Nécessite mongoose d'abord

const mongoose = require('mongoose');

Corrigez votre code ci-dessous, vous ne pouvez pas non plus obtenir l'identifiant exact du sous-document, mais vous pouvez obtenir le document racine mis à jour -

const updatedUser = await User.findOneAndUpdate({
        _id: mongoose.Types.ObjectId(req.body._id)
    },
    {
        $addToSet: {
            timings: {
                startTime, 
                endTime, 
                elapsedTime
            }
        }
    }, {
        new: true
    }).exec();