Mongoose intermediate data saving in DB
06:54 29 Dec 2025

i have a branch management system in my application where some approved requests show the processor's name (like "usernme") while others show "Legacy".

The issue:

  • Logs always show processedBy, processedByName, processedByEmail

  • Branches are created successfully for all requests

  • ❌ But MongoDB is missing these fields for some requests

  • ❓ Why does it work for some users but not others?

    1. Mongoose Schema Definition

    The fields ARE defined in the schema:

    processedBy: { type: String },

    processedByName: { type: String },

    processedByEmail: { type: String },

    processedAt: { type: Date },

    2. Approval Route - Setting Values

    After successful branch creation:

    // Get user info
    const userId = session.user?.id || session.user?.email;
    const userName = session.user?.name || 'Unknown User';
    const userEmail = session.user?.email || '';
    
    // Set fields in memory
    branchRequest.requestStatus = 'APPROVED';
    branchRequest.processedBy = userId;
    branchRequest.processedByName = userName;
    branchRequest.processedByEmail = userEmail;
    branchRequest.processedAt = new Date();
    branchRequest.approvedBy = userId;
    branchRequest.approvedAt = new Date();
    
    // Mark as modified
    branchRequest.markModified('processedBy');
    branchRequest.markModified('processedByName');
    branchRequest.markModified('processedByEmail');
    branchRequest.markModified('processedAt');
    
    // Save to database
    try {
      const savedRequest = await branchRequest.save();
    
      logger.info('Branch creation request approved successfully', {
        id: savedRequest._id,
        processedBy: savedRequest.processedBy,        // ✅ Shows in logs
        processedByName: savedRequest.processedByName, // ✅ Shows in logs
        processedByEmail: savedRequest.processedByEmail // ✅ Shows in logs
      });
    } catch (saveError) {
      logger.error('Error saving processed by information', saveError);
      return NextResponse.json(
        { success: false, message: 'Branch created but failed to save approval information' },
        { status: 500 }
      );
    }
    
    return NextResponse.json(
      { success: true, message: 'approved', data: branchRequest }, // ← Returns in-memory object
      { status: 200 }
    );
    

    3. Display Logic - Shows "Legacy"

    {request.processedBy || request.approverEmail ? (
      
        {request.processedByName || request.approverEmail}
      
    ) : request.requestStatus !== 'PENDING' ? (
      Legacy  // ← Shows this
    ) : (
      -
    )}{request.processedBy || request.approverEmail ? (
      
        {request.processedByName || request.approverEmail}
      
    ) : request.requestStatus !== 'PENDING' ? (
      Legacy  // ← Shows this
    ) : (
      -
    )}
    

    4. MongoDB Connection

    let cachedClient: MongoClient | null = null;
    let cachedDb: Db | null = null;
    
    export async function connectToDatabase() {
      if (cachedClient && cachedDb) {
        return { client: cachedClient, db: cachedDb };
      }
    
      try {
        const client = await MongoClient.connect(MONGODB_URI);
        const db = client.db(DB_NAME);
    
        cachedClient = client;
        cachedDb = db;
    
        return { client, db };
      } catch (error) {
        logger.error('Failed to connect to MongoDB', error);
        throw new Error('Database connection failed');
      }
    }
    

    Does anyone have idea why this is intermediately happening. i am confused..

mongodb mongoose next.js mongodb-query issue-tracking