Thin MongoDB ODM built for Standard Schema
mongodb zod deno
1import { z } from 'zod'; 2import { defineModel, MongoModel, connect, disconnect, InferModel, InsertType } from '../src'; 3import { ObjectId } from 'mongodb'; 4 5const userSchema = defineModel(z.object({ 6 name: z.string(), 7 email: z.string().email(), 8 age: z.number().int().positive().optional(), 9 createdAt: z.date().default(() => new Date()), 10})); 11 12type User = InferModel<typeof userSchema>; 13type UserInsert = InsertType<typeof userSchema>; 14 15async function runTests() { 16 try { 17 await connect('mongodb://localhost:27017', 'mizzleorm_test_db'); 18 console.log('Connected to MongoDB for testing.'); 19 20 const UserModel = new MongoModel('users', userSchema); 21 22 // Clean up before tests 23 await UserModel.delete({}); 24 console.log('Cleaned up existing data.'); 25 26 // Test 1: Insert a new user 27 const newUser: UserInsert = { 28 name: 'Test User', 29 email: 'test@example.com', 30 age: 25, 31 }; 32 const insertResult = await UserModel.insertOne(newUser); 33 console.log('Test 1 (Insert): User inserted with ID:', insertResult.insertedId); 34 if (!insertResult.insertedId) { 35 throw new Error('Test 1 Failed: User not inserted.'); 36 } 37 38 // Test 2: Find the inserted user 39 const foundUser = await UserModel.findOne({ _id: new ObjectId(insertResult.insertedId) }); 40 console.log('Test 2 (Find One): Found user:', foundUser); 41 if (!foundUser || foundUser.email !== 'test@example.com') { 42 throw new Error('Test 2 Failed: User not found or data mismatch.'); 43 } 44 45 // Test 3: Update the user 46 const updateResult = await UserModel.update( 47 { _id: new ObjectId(insertResult.insertedId) }, 48 { age: 26 } 49 ); 50 console.log('Test 3 (Update): Modified count:', updateResult.modifiedCount); 51 if (updateResult.modifiedCount !== 1) { 52 throw new Error('Test 3 Failed: User not updated.'); 53 } 54 const updatedUser = await UserModel.findOne({ _id: new ObjectId(insertResult.insertedId) }); 55 if (!updatedUser || updatedUser.age !== 26) { 56 throw new Error('Test 3 Failed: Updated user data mismatch.'); 57 } 58 59 // Test 4: Delete the user 60 const deleteResult = await UserModel.delete({ _id: new ObjectId(insertResult.insertedId) }); 61 console.log('Test 4 (Delete): Deleted count:', deleteResult.deletedCount); 62 if (deleteResult.deletedCount !== 1) { 63 throw new Error('Test 4 Failed: User not deleted.'); 64 } 65 const deletedUser = await UserModel.findOne({ _id: new ObjectId(insertResult.insertedId) }); 66 if (deletedUser) { 67 throw new Error('Test 4 Failed: User still exists after deletion.'); 68 } 69 70 console.log('\nAll tests passed successfully!'); 71 72 } catch (error) { 73 console.error('\nTests failed:', error); 74 process.exit(1); 75 } finally { 76 await disconnect(); 77 console.log('Disconnected from MongoDB.'); 78 } 79} 80 81runTests(); 82 83