[{"data":1,"prerenderedAt":2986},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fpackages\u002Fmongoose":176,"\u002Fdocs\u002Fpackages\u002Fmongoose-surround":2981},[4,21,86,158],{"title":5,"path":6,"stem":7,"children":8,"status":11,"icon":20},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,16],{"title":10,"path":6,"stem":7,"status":11},"Introduction",null,{"title":13,"path":14,"stem":15,"status":11},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation",{"title":17,"path":18,"stem":19,"status":11},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","1.docs\u002F1.getting-started\u002F3.quick-start",false,{"title":22,"path":23,"stem":24,"children":25,"status":11,"icon":20},"Core Concepts","\u002Fdocs\u002Fcore-concepts","1.docs\u002F2.core-concepts\u002F1.index",[26,28,32,36,46,50,54,58,62,66,70,74,78,82],{"title":27,"path":23,"stem":24,"status":11},"Overview",{"title":29,"path":30,"stem":31,"status":11},"Response","\u002Fdocs\u002Fcore-concepts\u002Fresponse","1.docs\u002F2.core-concepts\u002F10.response",{"title":33,"path":34,"stem":35,"status":11},"Testing","\u002Fdocs\u002Fcore-concepts\u002Ftesting","1.docs\u002F2.core-concepts\u002F12.testing",{"title":37,"path":38,"stem":39,"children":40,"status":11,"icon":20,"defaultOpen":20},"Decorators","\u002Fdocs\u002Fcore-concepts\u002Fdecorators","1.docs\u002F2.core-concepts\u002F13.decorators\u002F1.index",[41,42],{"title":27,"path":38,"stem":39,"status":11},{"title":43,"path":44,"stem":45,"status":11},"Custom","\u002Fdocs\u002Fcore-concepts\u002Fdecorators\u002Fcustom","1.docs\u002F2.core-concepts\u002F13.decorators\u002F2.custom",{"title":47,"path":48,"stem":49,"status":11},"Discovery Service","\u002Fdocs\u002Fcore-concepts\u002Fdiscovery","1.docs\u002F2.core-concepts\u002F14.discovery",{"title":51,"path":52,"stem":53,"status":11},"Application Lifecycle","\u002Fdocs\u002Fcore-concepts\u002Fapp-lifecycle","1.docs\u002F2.core-concepts\u002F15.app-lifecycle",{"title":55,"path":56,"stem":57,"status":11},"Controllers","\u002Fdocs\u002Fcore-concepts\u002Fcontrollers","1.docs\u002F2.core-concepts\u002F2.controllers",{"title":59,"path":60,"stem":61,"status":11},"Routing","\u002Fdocs\u002Fcore-concepts\u002Frouting","1.docs\u002F2.core-concepts\u002F3.routing",{"title":63,"path":64,"stem":65,"status":11},"Providers","\u002Fdocs\u002Fcore-concepts\u002Fproviders","1.docs\u002F2.core-concepts\u002F4.providers",{"title":67,"path":68,"stem":69,"status":11},"Modules","\u002Fdocs\u002Fcore-concepts\u002Fmodules","1.docs\u002F2.core-concepts\u002F5.modules",{"title":71,"path":72,"stem":73,"status":11},"Configuration","\u002Fdocs\u002Fcore-concepts\u002Fconfiguration","1.docs\u002F2.core-concepts\u002F6.configuration",{"title":75,"path":76,"stem":77,"status":11},"Middleware","\u002Fdocs\u002Fcore-concepts\u002Fmiddleware","1.docs\u002F2.core-concepts\u002F7.middleware",{"title":79,"path":80,"stem":81,"status":11},"Guards","\u002Fdocs\u002Fcore-concepts\u002Fguards","1.docs\u002F2.core-concepts\u002F8.guards",{"title":83,"path":84,"stem":85,"status":11},"Exceptions","\u002Fdocs\u002Fcore-concepts\u002Fexceptions","1.docs\u002F2.core-concepts\u002F9.exceptions",{"title":87,"path":88,"stem":89,"children":90,"status":11,"icon":20},"Packages","\u002Fdocs\u002Fpackages","1.docs\u002F3.packages\u002F1.index",[91,92,97,108,112,130,134,138,142,146,150,154],{"title":27,"path":88,"stem":89,"status":11},{"title":93,"path":94,"stem":95,"status":96},"CLI","\u002Fdocs\u002Fpackages\u002Fcli","1.docs\u002F3.packages\u002F10.cli","experimental",{"title":98,"path":99,"stem":100,"children":101,"status":11,"icon":20,"defaultOpen":20},"Events","\u002Fdocs\u002Fpackages\u002Fmessaging","1.docs\u002F3.packages\u002F11.messaging\u002F1.index",[102,104],{"title":27,"path":99,"stem":100,"status":103},"beta",{"title":105,"path":106,"stem":107,"status":96},"Redis","\u002Fdocs\u002Fpackages\u002Fmessaging\u002Fredis","1.docs\u002F3.packages\u002F11.messaging\u002F2.redis",{"title":109,"path":110,"stem":111,"status":103},"Serve Static","\u002Fdocs\u002Fpackages\u002Fserve-static","1.docs\u002F3.packages\u002F12.serve-static",{"title":113,"path":114,"stem":115,"children":116,"status":11,"icon":20,"defaultOpen":20},"Auth","\u002Fdocs\u002Fpackages\u002Fauth","1.docs\u002F3.packages\u002F2.auth\u002F1.index",[117,118,122,126],{"title":27,"path":114,"stem":115,"status":103},{"title":119,"path":120,"stem":121,"status":103},"JWT Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Fjwt","1.docs\u002F3.packages\u002F2.auth\u002F2.jwt",{"title":123,"path":124,"stem":125,"status":103},"Local Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Flocal","1.docs\u002F3.packages\u002F2.auth\u002F3.local",{"title":127,"path":128,"stem":129,"status":96},"OAuth2 Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Foauth2","1.docs\u002F3.packages\u002F2.auth\u002F4.oauth2",{"title":131,"path":132,"stem":133,"status":103},"JWT","\u002Fdocs\u002Fpackages\u002Fjwt","1.docs\u002F3.packages\u002F3.jwt",{"title":135,"path":136,"stem":137,"status":103},"Drizzle","\u002Fdocs\u002Fpackages\u002Fdrizzle","1.docs\u002F3.packages\u002F4.drizzle",{"title":139,"path":140,"stem":141,"status":103},"Papr","\u002Fdocs\u002Fpackages\u002Fpapr","1.docs\u002F3.packages\u002F5.papr",{"title":143,"path":144,"stem":145,"status":103},"Mongoose","\u002Fdocs\u002Fpackages\u002Fmongoose","1.docs\u002F3.packages\u002F6.mongoose",{"title":147,"path":148,"stem":149,"status":103},"Swagger","\u002Fdocs\u002Fpackages\u002Fswagger","1.docs\u002F3.packages\u002F7.swagger",{"title":151,"path":152,"stem":153,"status":103},"Node Server","\u002Fdocs\u002Fpackages\u002Fnode-server","1.docs\u002F3.packages\u002F8.node-server",{"title":155,"path":156,"stem":157,"status":103},"uWS Server","\u002Fdocs\u002Fpackages\u002Fuws-server","1.docs\u002F3.packages\u002F9.uws-server",{"title":159,"path":160,"stem":161,"children":162,"status":11,"icon":20},"Roadmap","\u002Fdocs\u002Froadmap","1.docs\u002F4.roadmap\u002F1.index",[163,164,168,172],{"title":27,"path":160,"stem":161,"status":11},{"title":165,"path":166,"stem":167,"status":11},"Short term (0-3 months)","\u002Fdocs\u002Froadmap\u002Fshort-term","1.docs\u002F4.roadmap\u002F2.short-term",{"title":169,"path":170,"stem":171,"status":11},"Mid term (3-9 months)","\u002Fdocs\u002Froadmap\u002Fmid-term","1.docs\u002F4.roadmap\u002F3.mid-term",{"title":173,"path":174,"stem":175,"status":11},"Long term (9-12+ months)","\u002Fdocs\u002Froadmap\u002Flong-term","1.docs\u002F4.roadmap\u002F4.long-term",{"id":177,"title":143,"body":178,"description":2976,"extension":2977,"meta":2978,"navigation":414,"path":144,"seo":2979,"status":103,"stem":145,"__hash__":2980},"docs\u002F1.docs\u002F3.packages\u002F6.mongoose.md",{"type":179,"value":180,"toc":2960},"minimark",[181,185,216,231,234,314,317,349,353,521,532,682,687,785,805,809,826,1111,1114,1228,1243,1247,1250,1383,1388,1392,1400,1814,1837,1841,1846,2107,2113,2116,2131,2247,2250,2301,2309,2446,2459,2462,2491,2495,2509,2512,2518,2844,2853,2857,2929,2933,2956],[182,183,27],"h2",{"id":184},"overview",[186,187,188,192,193,199,200,203,204,207,208,211,212,215],"p",{},[189,190,191],"code",{},"@miiajs\u002Fmongoose"," wires ",[194,195,143],"a",{"href":196,"rel":197},"https:\u002F\u002Fmongoosejs.com",[198],"nofollow"," into MiiaJS. Declare models with ",[189,201,202],{},"defineModel()",", register them per feature module, and inject them in services as plain DI tokens with ",[189,205,206],{},"inject(User)",". The raw ",[189,209,210],{},"mongoose.Connection"," is available through ",[189,213,214],{},"inject(mongooseConnection())"," for migrations, transactions, and direct collection-level access.",[186,217,218,219,222,223,226,227,230],{},"The package owns the connection lifecycle (",[189,220,221],{},"onInit","\u002F",[189,224,225],{},"onDestroy","), retry logic for transient errors, and model compilation. The internal ",[189,228,229],{},"MongooseService"," is an implementation detail - users never inject it directly.",[182,232,13],{"id":233},"installation",[235,236,237,265,282,298],"code-group",{},[238,239,245],"pre",{"className":240,"code":241,"filename":242,"language":243,"meta":244,"style":244},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add @miiajs\u002Fmongoose mongoose\n","bun","bash","",[189,246,247],{"__ignoreMap":244},[248,249,252,255,259,262],"span",{"class":250,"line":251},"line",1,[248,253,242],{"class":254},"sBMFI",[248,256,258],{"class":257},"sfazB"," add",[248,260,261],{"class":257}," @miiajs\u002Fmongoose",[248,263,264],{"class":257}," mongoose\n",[238,266,269],{"className":240,"code":267,"filename":268,"language":243,"meta":244,"style":244},"npm install @miiajs\u002Fmongoose mongoose\n","npm",[189,270,271],{"__ignoreMap":244},[248,272,273,275,278,280],{"class":250,"line":251},[248,274,268],{"class":254},[248,276,277],{"class":257}," install",[248,279,261],{"class":257},[248,281,264],{"class":257},[238,283,286],{"className":240,"code":284,"filename":285,"language":243,"meta":244,"style":244},"pnpm add @miiajs\u002Fmongoose mongoose\n","pnpm",[189,287,288],{"__ignoreMap":244},[248,289,290,292,294,296],{"class":250,"line":251},[248,291,285],{"class":254},[248,293,258],{"class":257},[248,295,261],{"class":257},[248,297,264],{"class":257},[238,299,302],{"className":240,"code":300,"filename":301,"language":243,"meta":244,"style":244},"yarn add @miiajs\u002Fmongoose mongoose\n","yarn",[189,303,304],{"__ignoreMap":244},[248,305,306,308,310,312],{"class":250,"line":251},[248,307,301],{"class":254},[248,309,258],{"class":257},[248,311,261],{"class":257},[248,313,264],{"class":257},[186,315,316],{},"Peer dependencies:",[318,319,320,333],"table",{},[321,322,323],"thead",{},[324,325,326,330],"tr",{},[327,328,329],"th",{},"Package",[327,331,332],{},"Version",[334,335,336],"tbody",{},[324,337,338,344],{},[339,340,341],"td",{},[189,342,343],{},"mongoose",[339,345,346],{},[189,347,348],{},"^9.4.1",[182,350,352],{"id":351},"setup","Setup",[238,354,358],{"className":355,"code":356,"language":357,"meta":244,"style":244},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Module } from '@miiajs\u002Fcore'\nimport { MongooseModule } from '@miiajs\u002Fmongoose'\n\n@Module({\n  imports: [\n    MongooseModule.configure({\n      uri: 'mongodb:\u002F\u002Flocalhost:27017\u002Fmyapp',\n    }),\n  ],\n})\nclass AppModule {}\n","typescript",[189,359,360,389,409,416,432,445,461,480,491,499,508],{"__ignoreMap":244},[248,361,362,366,370,374,377,380,383,386],{"class":250,"line":251},[248,363,365],{"class":364},"s7zQu","import",[248,367,369],{"class":368},"sMK4o"," {",[248,371,373],{"class":372},"sTEyZ"," Module",[248,375,376],{"class":368}," }",[248,378,379],{"class":364}," from",[248,381,382],{"class":368}," '",[248,384,385],{"class":257},"@miiajs\u002Fcore",[248,387,388],{"class":368},"'\n",[248,390,392,394,396,399,401,403,405,407],{"class":250,"line":391},2,[248,393,365],{"class":364},[248,395,369],{"class":368},[248,397,398],{"class":372}," MongooseModule",[248,400,376],{"class":368},[248,402,379],{"class":364},[248,404,382],{"class":368},[248,406,191],{"class":257},[248,408,388],{"class":368},[248,410,412],{"class":250,"line":411},3,[248,413,415],{"emptyLinePlaceholder":414},true,"\n",[248,417,419,422,426,429],{"class":250,"line":418},4,[248,420,421],{"class":368},"@",[248,423,425],{"class":424},"s2Zo4","Module",[248,427,428],{"class":372},"(",[248,430,431],{"class":368},"{\n",[248,433,435,439,442],{"class":250,"line":434},5,[248,436,438],{"class":437},"swJcz","  imports",[248,440,441],{"class":368},":",[248,443,444],{"class":372}," [\n",[248,446,448,451,454,457,459],{"class":250,"line":447},6,[248,449,450],{"class":372},"    MongooseModule",[248,452,453],{"class":368},".",[248,455,456],{"class":424},"configure",[248,458,428],{"class":372},[248,460,431],{"class":368},[248,462,464,467,469,471,474,477],{"class":250,"line":463},7,[248,465,466],{"class":437},"      uri",[248,468,441],{"class":368},[248,470,382],{"class":368},[248,472,473],{"class":257},"mongodb:\u002F\u002Flocalhost:27017\u002Fmyapp",[248,475,476],{"class":368},"'",[248,478,479],{"class":368},",\n",[248,481,483,486,489],{"class":250,"line":482},8,[248,484,485],{"class":368},"    }",[248,487,488],{"class":372},")",[248,490,479],{"class":368},[248,492,494,497],{"class":250,"line":493},9,[248,495,496],{"class":372},"  ]",[248,498,479],{"class":368},[248,500,502,505],{"class":250,"line":501},10,[248,503,504],{"class":368},"}",[248,506,507],{"class":372},")\n",[248,509,511,515,518],{"class":250,"line":510},11,[248,512,514],{"class":513},"spNyl","class",[248,516,517],{"class":254}," AppModule",[248,519,520],{"class":368}," {}\n",[186,522,523,524,527,528,531],{},"With ",[189,525,526],{},"ConfigService"," (from ",[189,529,530],{},"@miiajs\u002Fconfig","):",[238,533,535],{"className":355,"code":534,"language":357,"meta":244,"style":244},"import { ConfigService } from '@miiajs\u002Fconfig'\n\nMongooseModule.configure((resolve) => {\n  const config = resolve(ConfigService)\n  return {\n    uri: config.getOrThrow('MONGODB_URL'),\n    retry: { attempts: 5, delay: 2_000 },\n  }\n})\n",[189,536,537,556,560,585,605,612,639,671,676],{"__ignoreMap":244},[248,538,539,541,543,546,548,550,552,554],{"class":250,"line":251},[248,540,365],{"class":364},[248,542,369],{"class":368},[248,544,545],{"class":372}," ConfigService",[248,547,376],{"class":368},[248,549,379],{"class":364},[248,551,382],{"class":368},[248,553,530],{"class":257},[248,555,388],{"class":368},[248,557,558],{"class":250,"line":391},[248,559,415],{"emptyLinePlaceholder":414},[248,561,562,565,567,569,571,573,577,579,582],{"class":250,"line":411},[248,563,564],{"class":372},"MongooseModule",[248,566,453],{"class":368},[248,568,456],{"class":424},[248,570,428],{"class":372},[248,572,428],{"class":368},[248,574,576],{"class":575},"sHdIc","resolve",[248,578,488],{"class":368},[248,580,581],{"class":513}," =>",[248,583,584],{"class":368}," {\n",[248,586,587,590,593,596,599,601,603],{"class":250,"line":418},[248,588,589],{"class":513},"  const",[248,591,592],{"class":372}," config",[248,594,595],{"class":368}," =",[248,597,598],{"class":424}," resolve",[248,600,428],{"class":437},[248,602,526],{"class":372},[248,604,507],{"class":437},[248,606,607,610],{"class":250,"line":434},[248,608,609],{"class":364},"  return",[248,611,584],{"class":368},[248,613,614,617,619,621,623,626,628,630,633,635,637],{"class":250,"line":447},[248,615,616],{"class":437},"    uri",[248,618,441],{"class":368},[248,620,592],{"class":372},[248,622,453],{"class":368},[248,624,625],{"class":424},"getOrThrow",[248,627,428],{"class":437},[248,629,476],{"class":368},[248,631,632],{"class":257},"MONGODB_URL",[248,634,476],{"class":368},[248,636,488],{"class":437},[248,638,479],{"class":368},[248,640,641,644,646,648,651,653,657,660,663,665,668],{"class":250,"line":463},[248,642,643],{"class":437},"    retry",[248,645,441],{"class":368},[248,647,369],{"class":368},[248,649,650],{"class":437}," attempts",[248,652,441],{"class":368},[248,654,656],{"class":655},"sbssI"," 5",[248,658,659],{"class":368},",",[248,661,662],{"class":437}," delay",[248,664,441],{"class":368},[248,666,667],{"class":655}," 2_000",[248,669,670],{"class":368}," },\n",[248,672,673],{"class":250,"line":482},[248,674,675],{"class":368},"  }\n",[248,677,678,680],{"class":250,"line":493},[248,679,504],{"class":368},[248,681,507],{"class":372},[683,684,686],"h3",{"id":685},"configuration-options","Configuration options",[318,688,689,705],{},[321,690,691],{},[324,692,693,696,699,702],{},[327,694,695],{},"Option",[327,697,698],{},"Type",[327,700,701],{},"Default",[327,703,704],{},"Description",[334,706,707,725,746,766],{},[324,708,709,714,719,722],{},[339,710,711],{},[189,712,713],{},"uri",[339,715,716],{},[189,717,718],{},"string",[339,720,721],{},"required",[339,723,724],{},"MongoDB connection URI",[324,726,727,732,737,740],{},[339,728,729],{},[189,730,731],{},"connectionOptions",[339,733,734],{},[189,735,736],{},"mongoose.ConnectOptions",[339,738,739],{},"-",[339,741,742,743],{},"Forwarded to ",[189,744,745],{},"createConnection()",[324,747,748,753,758,763],{},[339,749,750],{},[189,751,752],{},"retry.attempts",[339,754,755],{},[189,756,757],{},"number",[339,759,760],{},[189,761,762],{},"3",[339,764,765],{},"Connection attempts before giving up",[324,767,768,773,777,782],{},[339,769,770],{},[189,771,772],{},"retry.delay",[339,774,775],{},[189,776,757],{},[339,778,779],{},[189,780,781],{},"2_000",[339,783,784],{},"Delay (ms) between attempts",[186,786,787,788,791,792,791,795,791,798,791,801,804],{},"Only network-level errors (",[189,789,790],{},"ECONNREFUSED",", ",[189,793,794],{},"ECONNRESET",[189,796,797],{},"ETIMEDOUT",[189,799,800],{},"ENOTFOUND",[189,802,803],{},"EAI_AGAIN",") are retried. Auth and schema errors abort immediately.",[182,806,808],{"id":807},"define-models","Define models",[186,810,811,814,815,818,819,822,823,441],{},[189,812,813],{},"defineModel(name, schema)"," returns a class-token that doubles as a typed DI token for the compiled ",[189,816,817],{},"mongoose.Model\u003CT>",". Pass it to ",[189,820,821],{},"MongooseModule.register()"," and to ",[189,824,825],{},"inject()",[238,827,829],{"className":355,"code":828,"language":357,"meta":244,"style":244},"import { Schema } from 'mongoose'\nimport { defineModel } from '@miiajs\u002Fmongoose'\n\nexport interface IUser {\n  name: string\n  email: string\n  role: string\n}\n\nconst userSchema = new Schema\u003CIUser>(\n  {\n    name: { type: String, required: true },\n    email: { type: String, required: true },\n    role: { type: String, default: 'user' },\n  },\n  { timestamps: true },\n)\n\nexport const User = defineModel\u003CIUser>('User', userSchema)\n",[189,830,831,850,869,873,886,896,905,914,919,923,951,956,987,1013,1045,1051,1066,1071,1076],{"__ignoreMap":244},[248,832,833,835,837,840,842,844,846,848],{"class":250,"line":251},[248,834,365],{"class":364},[248,836,369],{"class":368},[248,838,839],{"class":372}," Schema",[248,841,376],{"class":368},[248,843,379],{"class":364},[248,845,382],{"class":368},[248,847,343],{"class":257},[248,849,388],{"class":368},[248,851,852,854,856,859,861,863,865,867],{"class":250,"line":391},[248,853,365],{"class":364},[248,855,369],{"class":368},[248,857,858],{"class":372}," defineModel",[248,860,376],{"class":368},[248,862,379],{"class":364},[248,864,382],{"class":368},[248,866,191],{"class":257},[248,868,388],{"class":368},[248,870,871],{"class":250,"line":411},[248,872,415],{"emptyLinePlaceholder":414},[248,874,875,878,881,884],{"class":250,"line":418},[248,876,877],{"class":364},"export",[248,879,880],{"class":513}," interface",[248,882,883],{"class":254}," IUser",[248,885,584],{"class":368},[248,887,888,891,893],{"class":250,"line":434},[248,889,890],{"class":437},"  name",[248,892,441],{"class":368},[248,894,895],{"class":254}," string\n",[248,897,898,901,903],{"class":250,"line":447},[248,899,900],{"class":437},"  email",[248,902,441],{"class":368},[248,904,895],{"class":254},[248,906,907,910,912],{"class":250,"line":463},[248,908,909],{"class":437},"  role",[248,911,441],{"class":368},[248,913,895],{"class":254},[248,915,916],{"class":250,"line":482},[248,917,918],{"class":368},"}\n",[248,920,921],{"class":250,"line":493},[248,922,415],{"emptyLinePlaceholder":414},[248,924,925,928,931,934,937,939,942,945,948],{"class":250,"line":501},[248,926,927],{"class":513},"const",[248,929,930],{"class":372}," userSchema ",[248,932,933],{"class":368},"=",[248,935,936],{"class":368}," new",[248,938,839],{"class":424},[248,940,941],{"class":368},"\u003C",[248,943,944],{"class":254},"IUser",[248,946,947],{"class":368},">",[248,949,950],{"class":372},"(\n",[248,952,953],{"class":250,"line":510},[248,954,955],{"class":368},"  {\n",[248,957,959,962,964,966,969,971,974,976,979,981,985],{"class":250,"line":958},12,[248,960,961],{"class":437},"    name",[248,963,441],{"class":368},[248,965,369],{"class":368},[248,967,968],{"class":437}," type",[248,970,441],{"class":368},[248,972,973],{"class":372}," String",[248,975,659],{"class":368},[248,977,978],{"class":437}," required",[248,980,441],{"class":368},[248,982,984],{"class":983},"sfNiH"," true",[248,986,670],{"class":368},[248,988,990,993,995,997,999,1001,1003,1005,1007,1009,1011],{"class":250,"line":989},13,[248,991,992],{"class":437},"    email",[248,994,441],{"class":368},[248,996,369],{"class":368},[248,998,968],{"class":437},[248,1000,441],{"class":368},[248,1002,973],{"class":372},[248,1004,659],{"class":368},[248,1006,978],{"class":437},[248,1008,441],{"class":368},[248,1010,984],{"class":983},[248,1012,670],{"class":368},[248,1014,1016,1019,1021,1023,1025,1027,1029,1031,1034,1036,1038,1041,1043],{"class":250,"line":1015},14,[248,1017,1018],{"class":437},"    role",[248,1020,441],{"class":368},[248,1022,369],{"class":368},[248,1024,968],{"class":437},[248,1026,441],{"class":368},[248,1028,973],{"class":372},[248,1030,659],{"class":368},[248,1032,1033],{"class":437}," default",[248,1035,441],{"class":368},[248,1037,382],{"class":368},[248,1039,1040],{"class":257},"user",[248,1042,476],{"class":368},[248,1044,670],{"class":368},[248,1046,1048],{"class":250,"line":1047},15,[248,1049,1050],{"class":368},"  },\n",[248,1052,1054,1057,1060,1062,1064],{"class":250,"line":1053},16,[248,1055,1056],{"class":368},"  {",[248,1058,1059],{"class":437}," timestamps",[248,1061,441],{"class":368},[248,1063,984],{"class":983},[248,1065,670],{"class":368},[248,1067,1069],{"class":250,"line":1068},17,[248,1070,507],{"class":372},[248,1072,1074],{"class":250,"line":1073},18,[248,1075,415],{"emptyLinePlaceholder":414},[248,1077,1079,1081,1084,1087,1089,1091,1093,1095,1097,1099,1101,1104,1106,1108],{"class":250,"line":1078},19,[248,1080,877],{"class":364},[248,1082,1083],{"class":513}," const",[248,1085,1086],{"class":372}," User ",[248,1088,933],{"class":368},[248,1090,858],{"class":424},[248,1092,941],{"class":368},[248,1094,944],{"class":254},[248,1096,947],{"class":368},[248,1098,428],{"class":372},[248,1100,476],{"class":368},[248,1102,1103],{"class":257},"User",[248,1105,476],{"class":368},[248,1107,659],{"class":368},[248,1109,1110],{"class":372}," userSchema)\n",[186,1112,1113],{},"For schemas with plugins or middleware, compose the schema before passing it:",[238,1115,1117],{"className":355,"code":1116,"language":357,"meta":244,"style":244},"const userSchema = new Schema\u003CIUser>({ ... })\nuserSchema.plugin(autopopulate)\nuserSchema.pre('save', async function () { \u002F* ... *\u002F })\n\nexport const User = defineModel('User', userSchema)\n",[189,1118,1119,1149,1162,1200,1204],{"__ignoreMap":244},[248,1120,1121,1123,1125,1127,1129,1131,1133,1135,1137,1139,1142,1145,1147],{"class":250,"line":251},[248,1122,927],{"class":513},[248,1124,930],{"class":372},[248,1126,933],{"class":368},[248,1128,936],{"class":368},[248,1130,839],{"class":424},[248,1132,941],{"class":368},[248,1134,944],{"class":254},[248,1136,947],{"class":368},[248,1138,428],{"class":372},[248,1140,1141],{"class":368},"{",[248,1143,1144],{"class":368}," ...",[248,1146,376],{"class":368},[248,1148,507],{"class":372},[248,1150,1151,1154,1156,1159],{"class":250,"line":391},[248,1152,1153],{"class":372},"userSchema",[248,1155,453],{"class":368},[248,1157,1158],{"class":424},"plugin",[248,1160,1161],{"class":372},"(autopopulate)\n",[248,1163,1164,1166,1168,1170,1172,1174,1177,1179,1181,1184,1187,1190,1192,1196,1198],{"class":250,"line":411},[248,1165,1153],{"class":372},[248,1167,453],{"class":368},[248,1169,238],{"class":424},[248,1171,428],{"class":372},[248,1173,476],{"class":368},[248,1175,1176],{"class":257},"save",[248,1178,476],{"class":368},[248,1180,659],{"class":368},[248,1182,1183],{"class":513}," async",[248,1185,1186],{"class":513}," function",[248,1188,1189],{"class":368}," ()",[248,1191,369],{"class":368},[248,1193,1195],{"class":1194},"sHwdD"," \u002F* ... *\u002F",[248,1197,376],{"class":368},[248,1199,507],{"class":372},[248,1201,1202],{"class":250,"line":418},[248,1203,415],{"emptyLinePlaceholder":414},[248,1205,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226],{"class":250,"line":434},[248,1207,877],{"class":364},[248,1209,1083],{"class":513},[248,1211,1086],{"class":372},[248,1213,933],{"class":368},[248,1215,858],{"class":424},[248,1217,428],{"class":372},[248,1219,476],{"class":368},[248,1221,1103],{"class":257},[248,1223,476],{"class":368},[248,1225,659],{"class":368},[248,1227,1110],{"class":372},[1229,1230,1231],"note",{},[186,1232,1233,1234,1237,1238,1242],{},"The token is a class. Each ",[189,1235,1236],{},"defineModel(...)"," call returns a fresh class, so two calls with the same arguments produce two distinct tokens - this is the supported way to point one model at two different connections (see ",[194,1239,1241],{"href":1240},"#multiple-connections","Multiple connections",").",[182,1244,1246],{"id":1245},"register-models","Register models",[186,1248,1249],{},"Register models in the feature module that owns them:",[238,1251,1253],{"className":355,"code":1252,"language":357,"meta":244,"style":244},"import { Module } from '@miiajs\u002Fcore'\nimport { MongooseModule } from '@miiajs\u002Fmongoose'\nimport { User } from '.\u002Fuser.model.js'\n\n@Module({\n  imports: [MongooseModule.register([User])],\n  controllers: [UserController],\n  providers: [UserService],\n})\nclass UserModule {}\n",[189,1254,1255,1273,1291,1311,1315,1325,1344,1356,1368,1374],{"__ignoreMap":244},[248,1256,1257,1259,1261,1263,1265,1267,1269,1271],{"class":250,"line":251},[248,1258,365],{"class":364},[248,1260,369],{"class":368},[248,1262,373],{"class":372},[248,1264,376],{"class":368},[248,1266,379],{"class":364},[248,1268,382],{"class":368},[248,1270,385],{"class":257},[248,1272,388],{"class":368},[248,1274,1275,1277,1279,1281,1283,1285,1287,1289],{"class":250,"line":391},[248,1276,365],{"class":364},[248,1278,369],{"class":368},[248,1280,398],{"class":372},[248,1282,376],{"class":368},[248,1284,379],{"class":364},[248,1286,382],{"class":368},[248,1288,191],{"class":257},[248,1290,388],{"class":368},[248,1292,1293,1295,1297,1300,1302,1304,1306,1309],{"class":250,"line":411},[248,1294,365],{"class":364},[248,1296,369],{"class":368},[248,1298,1299],{"class":372}," User",[248,1301,376],{"class":368},[248,1303,379],{"class":364},[248,1305,382],{"class":368},[248,1307,1308],{"class":257},".\u002Fuser.model.js",[248,1310,388],{"class":368},[248,1312,1313],{"class":250,"line":418},[248,1314,415],{"emptyLinePlaceholder":414},[248,1316,1317,1319,1321,1323],{"class":250,"line":434},[248,1318,421],{"class":368},[248,1320,425],{"class":424},[248,1322,428],{"class":372},[248,1324,431],{"class":368},[248,1326,1327,1329,1331,1334,1336,1339,1342],{"class":250,"line":447},[248,1328,438],{"class":437},[248,1330,441],{"class":368},[248,1332,1333],{"class":372}," [MongooseModule",[248,1335,453],{"class":368},[248,1337,1338],{"class":424},"register",[248,1340,1341],{"class":372},"([User])]",[248,1343,479],{"class":368},[248,1345,1346,1349,1351,1354],{"class":250,"line":463},[248,1347,1348],{"class":437},"  controllers",[248,1350,441],{"class":368},[248,1352,1353],{"class":372}," [UserController]",[248,1355,479],{"class":368},[248,1357,1358,1361,1363,1366],{"class":250,"line":482},[248,1359,1360],{"class":437},"  providers",[248,1362,441],{"class":368},[248,1364,1365],{"class":372}," [UserService]",[248,1367,479],{"class":368},[248,1369,1370,1372],{"class":250,"line":493},[248,1371,504],{"class":368},[248,1373,507],{"class":372},[248,1375,1376,1378,1381],{"class":250,"line":501},[248,1377,514],{"class":513},[248,1379,1380],{"class":254}," UserModule",[248,1382,520],{"class":368},[186,1384,1385,1386,453],{},"Each registered token becomes its own DI provider keyed by the token class. Mongoose compiles the model during ",[189,1387,221],{},[182,1389,1391],{"id":1390},"use-in-services","Use in services",[186,1393,1394,1395,1397,1398,441],{},"Inject models with the standard ",[189,1396,825],{}," from ",[189,1399,385],{},[238,1401,1403],{"className":355,"code":1402,"language":357,"meta":244,"style":244},"import { Injectable, inject } from '@miiajs\u002Fcore'\nimport { User } from '.\u002Fuser.model.js'\n\n@Injectable()\nclass UserService {\n  private users = inject(User)\n\n  async findAll() {\n    return this.users.find()\n  }\n\n  async findById(id: string) {\n    return this.users.findById(id)\n  }\n\n  async create(data: { name: string; email: string }) {\n    return this.users.create(data)\n  }\n\n  async update(id: string, data: Record\u003Cstring, any>) {\n    return this.users.findByIdAndUpdate(id, data, { new: true })\n  }\n\n  async delete(id: string) {\n    const result = await this.users.deleteOne({ _id: id })\n    return result.deletedCount > 0\n  }\n}\n",[189,1404,1405,1429,1447,1451,1461,1470,1485,1489,1502,1520,1524,1528,1549,1568,1572,1576,1614,1633,1637,1641,1681,1717,1722,1727,1747,1786,1804,1809],{"__ignoreMap":244},[248,1406,1407,1409,1411,1414,1416,1419,1421,1423,1425,1427],{"class":250,"line":251},[248,1408,365],{"class":364},[248,1410,369],{"class":368},[248,1412,1413],{"class":372}," Injectable",[248,1415,659],{"class":368},[248,1417,1418],{"class":372}," inject",[248,1420,376],{"class":368},[248,1422,379],{"class":364},[248,1424,382],{"class":368},[248,1426,385],{"class":257},[248,1428,388],{"class":368},[248,1430,1431,1433,1435,1437,1439,1441,1443,1445],{"class":250,"line":391},[248,1432,365],{"class":364},[248,1434,369],{"class":368},[248,1436,1299],{"class":372},[248,1438,376],{"class":368},[248,1440,379],{"class":364},[248,1442,382],{"class":368},[248,1444,1308],{"class":257},[248,1446,388],{"class":368},[248,1448,1449],{"class":250,"line":411},[248,1450,415],{"emptyLinePlaceholder":414},[248,1452,1453,1455,1458],{"class":250,"line":418},[248,1454,421],{"class":368},[248,1456,1457],{"class":424},"Injectable",[248,1459,1460],{"class":372},"()\n",[248,1462,1463,1465,1468],{"class":250,"line":434},[248,1464,514],{"class":513},[248,1466,1467],{"class":254}," UserService",[248,1469,584],{"class":368},[248,1471,1472,1475,1478,1480,1482],{"class":250,"line":447},[248,1473,1474],{"class":513},"  private",[248,1476,1477],{"class":437}," users",[248,1479,595],{"class":368},[248,1481,1418],{"class":437},[248,1483,1484],{"class":372},"(User)\n",[248,1486,1487],{"class":250,"line":463},[248,1488,415],{"emptyLinePlaceholder":414},[248,1490,1491,1494,1497,1500],{"class":250,"line":482},[248,1492,1493],{"class":513},"  async",[248,1495,1496],{"class":437}," findAll",[248,1498,1499],{"class":368},"()",[248,1501,584],{"class":368},[248,1503,1504,1507,1510,1513,1515,1518],{"class":250,"line":493},[248,1505,1506],{"class":364},"    return",[248,1508,1509],{"class":368}," this.",[248,1511,1512],{"class":372},"users",[248,1514,453],{"class":368},[248,1516,1517],{"class":424},"find",[248,1519,1460],{"class":437},[248,1521,1522],{"class":250,"line":501},[248,1523,675],{"class":368},[248,1525,1526],{"class":250,"line":510},[248,1527,415],{"emptyLinePlaceholder":414},[248,1529,1530,1532,1535,1537,1540,1542,1545,1547],{"class":250,"line":958},[248,1531,1493],{"class":513},[248,1533,1534],{"class":437}," findById",[248,1536,428],{"class":368},[248,1538,1539],{"class":575},"id",[248,1541,441],{"class":368},[248,1543,1544],{"class":254}," string",[248,1546,488],{"class":368},[248,1548,584],{"class":368},[248,1550,1551,1553,1555,1557,1559,1562,1564,1566],{"class":250,"line":989},[248,1552,1506],{"class":364},[248,1554,1509],{"class":368},[248,1556,1512],{"class":372},[248,1558,453],{"class":368},[248,1560,1561],{"class":424},"findById",[248,1563,428],{"class":437},[248,1565,1539],{"class":372},[248,1567,507],{"class":437},[248,1569,1570],{"class":250,"line":1015},[248,1571,675],{"class":368},[248,1573,1574],{"class":250,"line":1047},[248,1575,415],{"emptyLinePlaceholder":414},[248,1577,1578,1580,1583,1585,1588,1590,1592,1595,1597,1599,1602,1605,1607,1609,1612],{"class":250,"line":1053},[248,1579,1493],{"class":513},[248,1581,1582],{"class":437}," create",[248,1584,428],{"class":368},[248,1586,1587],{"class":575},"data",[248,1589,441],{"class":368},[248,1591,369],{"class":368},[248,1593,1594],{"class":437}," name",[248,1596,441],{"class":368},[248,1598,1544],{"class":254},[248,1600,1601],{"class":368},";",[248,1603,1604],{"class":437}," email",[248,1606,441],{"class":368},[248,1608,1544],{"class":254},[248,1610,1611],{"class":368}," })",[248,1613,584],{"class":368},[248,1615,1616,1618,1620,1622,1624,1627,1629,1631],{"class":250,"line":1068},[248,1617,1506],{"class":364},[248,1619,1509],{"class":368},[248,1621,1512],{"class":372},[248,1623,453],{"class":368},[248,1625,1626],{"class":424},"create",[248,1628,428],{"class":437},[248,1630,1587],{"class":372},[248,1632,507],{"class":437},[248,1634,1635],{"class":250,"line":1073},[248,1636,675],{"class":368},[248,1638,1639],{"class":250,"line":1078},[248,1640,415],{"emptyLinePlaceholder":414},[248,1642,1644,1646,1649,1651,1653,1655,1657,1659,1662,1664,1667,1669,1671,1673,1676,1679],{"class":250,"line":1643},20,[248,1645,1493],{"class":513},[248,1647,1648],{"class":437}," update",[248,1650,428],{"class":368},[248,1652,1539],{"class":575},[248,1654,441],{"class":368},[248,1656,1544],{"class":254},[248,1658,659],{"class":368},[248,1660,1661],{"class":575}," data",[248,1663,441],{"class":368},[248,1665,1666],{"class":254}," Record",[248,1668,941],{"class":368},[248,1670,718],{"class":254},[248,1672,659],{"class":368},[248,1674,1675],{"class":254}," any",[248,1677,1678],{"class":368},">)",[248,1680,584],{"class":368},[248,1682,1684,1686,1688,1690,1692,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715],{"class":250,"line":1683},21,[248,1685,1506],{"class":364},[248,1687,1509],{"class":368},[248,1689,1512],{"class":372},[248,1691,453],{"class":368},[248,1693,1694],{"class":424},"findByIdAndUpdate",[248,1696,428],{"class":437},[248,1698,1539],{"class":372},[248,1700,659],{"class":368},[248,1702,1661],{"class":372},[248,1704,659],{"class":368},[248,1706,369],{"class":368},[248,1708,936],{"class":437},[248,1710,441],{"class":368},[248,1712,984],{"class":983},[248,1714,376],{"class":368},[248,1716,507],{"class":437},[248,1718,1720],{"class":250,"line":1719},22,[248,1721,675],{"class":368},[248,1723,1725],{"class":250,"line":1724},23,[248,1726,415],{"emptyLinePlaceholder":414},[248,1728,1730,1732,1735,1737,1739,1741,1743,1745],{"class":250,"line":1729},24,[248,1731,1493],{"class":513},[248,1733,1734],{"class":437}," delete",[248,1736,428],{"class":368},[248,1738,1539],{"class":575},[248,1740,441],{"class":368},[248,1742,1544],{"class":254},[248,1744,488],{"class":368},[248,1746,584],{"class":368},[248,1748,1750,1753,1756,1758,1761,1763,1765,1767,1770,1772,1774,1777,1779,1782,1784],{"class":250,"line":1749},25,[248,1751,1752],{"class":513},"    const",[248,1754,1755],{"class":372}," result",[248,1757,595],{"class":368},[248,1759,1760],{"class":364}," await",[248,1762,1509],{"class":368},[248,1764,1512],{"class":372},[248,1766,453],{"class":368},[248,1768,1769],{"class":424},"deleteOne",[248,1771,428],{"class":437},[248,1773,1141],{"class":368},[248,1775,1776],{"class":437}," _id",[248,1778,441],{"class":368},[248,1780,1781],{"class":372}," id",[248,1783,376],{"class":368},[248,1785,507],{"class":437},[248,1787,1789,1791,1793,1795,1798,1801],{"class":250,"line":1788},26,[248,1790,1506],{"class":364},[248,1792,1755],{"class":372},[248,1794,453],{"class":368},[248,1796,1797],{"class":372},"deletedCount",[248,1799,1800],{"class":368}," >",[248,1802,1803],{"class":655}," 0\n",[248,1805,1807],{"class":250,"line":1806},27,[248,1808,675],{"class":368},[248,1810,1812],{"class":250,"line":1811},28,[248,1813,918],{"class":368},[186,1815,1816,1818,1819,1821,1822,1825,1826,1829,1830,1833,1834,453],{},[189,1817,206],{}," returns a typed ",[189,1820,817],{}," proxy. The proxy preserves Mongoose's ",[189,1823,1824],{},"instanceof"," checks (",[189,1827,1828],{},"doc instanceof User",") and ",[189,1831,1832],{},"new User(data)"," document construction; the underlying compiled model is created during ",[189,1835,1836],{},"app.init()",[182,1838,1840],{"id":1839},"raw-connection-access","Raw connection access",[186,1842,1843,1844,441],{},"For aggregations, transactions, or direct collection access, inject the raw ",[189,1845,210],{},[238,1847,1849],{"className":355,"code":1848,"language":357,"meta":244,"style":244},"import { Injectable, inject } from '@miiajs\u002Fcore'\nimport { mongooseConnection } from '@miiajs\u002Fmongoose'\n\n@Injectable()\nclass MigrationService {\n  private connection = inject(mongooseConnection())\n\n  async listCollections() {\n    return (await this.connection.db?.listCollections().toArray()) ?? []\n  }\n\n  async runTransaction() {\n    const session = await this.connection.startSession()\n    try {\n      await session.withTransaction(async () => {\n        \u002F\u002F multi-document writes\n      })\n    } finally {\n      await session.endSession()\n    }\n  }\n}\n",[189,1850,1851,1873,1892,1896,1904,1913,1932,1936,1947,1989,1993,1997,2008,2030,2037,2060,2065,2072,2081,2094,2099,2103],{"__ignoreMap":244},[248,1852,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871],{"class":250,"line":251},[248,1854,365],{"class":364},[248,1856,369],{"class":368},[248,1858,1413],{"class":372},[248,1860,659],{"class":368},[248,1862,1418],{"class":372},[248,1864,376],{"class":368},[248,1866,379],{"class":364},[248,1868,382],{"class":368},[248,1870,385],{"class":257},[248,1872,388],{"class":368},[248,1874,1875,1877,1879,1882,1884,1886,1888,1890],{"class":250,"line":391},[248,1876,365],{"class":364},[248,1878,369],{"class":368},[248,1880,1881],{"class":372}," mongooseConnection",[248,1883,376],{"class":368},[248,1885,379],{"class":364},[248,1887,382],{"class":368},[248,1889,191],{"class":257},[248,1891,388],{"class":368},[248,1893,1894],{"class":250,"line":411},[248,1895,415],{"emptyLinePlaceholder":414},[248,1897,1898,1900,1902],{"class":250,"line":418},[248,1899,421],{"class":368},[248,1901,1457],{"class":424},[248,1903,1460],{"class":372},[248,1905,1906,1908,1911],{"class":250,"line":434},[248,1907,514],{"class":513},[248,1909,1910],{"class":254}," MigrationService",[248,1912,584],{"class":368},[248,1914,1915,1917,1920,1922,1924,1926,1929],{"class":250,"line":447},[248,1916,1474],{"class":513},[248,1918,1919],{"class":437}," connection",[248,1921,595],{"class":368},[248,1923,1418],{"class":437},[248,1925,428],{"class":372},[248,1927,1928],{"class":437},"mongooseConnection",[248,1930,1931],{"class":372},"())\n",[248,1933,1934],{"class":250,"line":463},[248,1935,415],{"emptyLinePlaceholder":414},[248,1937,1938,1940,1943,1945],{"class":250,"line":482},[248,1939,1493],{"class":513},[248,1941,1942],{"class":437}," listCollections",[248,1944,1499],{"class":368},[248,1946,584],{"class":368},[248,1948,1949,1951,1954,1957,1959,1962,1964,1967,1970,1973,1975,1977,1980,1983,1986],{"class":250,"line":493},[248,1950,1506],{"class":364},[248,1952,1953],{"class":437}," (",[248,1955,1956],{"class":364},"await",[248,1958,1509],{"class":368},[248,1960,1961],{"class":372},"connection",[248,1963,453],{"class":368},[248,1965,1966],{"class":372},"db",[248,1968,1969],{"class":368},"?.",[248,1971,1972],{"class":424},"listCollections",[248,1974,1499],{"class":437},[248,1976,453],{"class":368},[248,1978,1979],{"class":424},"toArray",[248,1981,1982],{"class":437},"()) ",[248,1984,1985],{"class":368},"??",[248,1987,1988],{"class":437}," []\n",[248,1990,1991],{"class":250,"line":501},[248,1992,675],{"class":368},[248,1994,1995],{"class":250,"line":510},[248,1996,415],{"emptyLinePlaceholder":414},[248,1998,1999,2001,2004,2006],{"class":250,"line":958},[248,2000,1493],{"class":513},[248,2002,2003],{"class":437}," runTransaction",[248,2005,1499],{"class":368},[248,2007,584],{"class":368},[248,2009,2010,2012,2015,2017,2019,2021,2023,2025,2028],{"class":250,"line":989},[248,2011,1752],{"class":513},[248,2013,2014],{"class":372}," session",[248,2016,595],{"class":368},[248,2018,1760],{"class":364},[248,2020,1509],{"class":368},[248,2022,1961],{"class":372},[248,2024,453],{"class":368},[248,2026,2027],{"class":424},"startSession",[248,2029,1460],{"class":437},[248,2031,2032,2035],{"class":250,"line":1015},[248,2033,2034],{"class":364},"    try",[248,2036,584],{"class":368},[248,2038,2039,2042,2044,2046,2049,2051,2054,2056,2058],{"class":250,"line":1047},[248,2040,2041],{"class":364},"      await",[248,2043,2014],{"class":372},[248,2045,453],{"class":368},[248,2047,2048],{"class":424},"withTransaction",[248,2050,428],{"class":437},[248,2052,2053],{"class":513},"async",[248,2055,1189],{"class":368},[248,2057,581],{"class":513},[248,2059,584],{"class":368},[248,2061,2062],{"class":250,"line":1053},[248,2063,2064],{"class":1194},"        \u002F\u002F multi-document writes\n",[248,2066,2067,2070],{"class":250,"line":1068},[248,2068,2069],{"class":368},"      }",[248,2071,507],{"class":437},[248,2073,2074,2076,2079],{"class":250,"line":1073},[248,2075,485],{"class":368},[248,2077,2078],{"class":364}," finally",[248,2080,584],{"class":368},[248,2082,2083,2085,2087,2089,2092],{"class":250,"line":1078},[248,2084,2041],{"class":364},[248,2086,2014],{"class":372},[248,2088,453],{"class":368},[248,2090,2091],{"class":424},"endSession",[248,2093,1460],{"class":437},[248,2095,2096],{"class":250,"line":1643},[248,2097,2098],{"class":368},"    }\n",[248,2100,2101],{"class":250,"line":1683},[248,2102,675],{"class":368},[248,2104,2105],{"class":250,"line":1719},[248,2106,918],{"class":368},[186,2108,2109,2112],{},[189,2110,2111],{},"mongooseConnection(name?)"," is memoized: the same name (including the default empty name) always returns the same token, so DI identity is stable across files.",[182,2114,1241],{"id":2115},"multiple-connections",[186,2117,2118,2119,2122,2123,2126,2127,2130],{},"Pass a ",[189,2120,2121],{},"name"," to ",[189,2124,2125],{},"configure()"," and ",[189,2128,2129],{},"register()"," for each additional database:",[238,2132,2134],{"className":355,"code":2133,"language":357,"meta":244,"style":244},"@Module({\n  imports: [\n    MongooseModule.configure({ uri: MAIN_DB }),\n    MongooseModule.configure({ uri: ANALYTICS_DB }, 'analytics'),\n    UserModule,\n    EventModule,\n  ],\n})\nclass AppModule {}\n",[189,2135,2136,2146,2154,2180,2213,2220,2227,2233,2239],{"__ignoreMap":244},[248,2137,2138,2140,2142,2144],{"class":250,"line":251},[248,2139,421],{"class":368},[248,2141,425],{"class":424},[248,2143,428],{"class":372},[248,2145,431],{"class":368},[248,2147,2148,2150,2152],{"class":250,"line":391},[248,2149,438],{"class":437},[248,2151,441],{"class":368},[248,2153,444],{"class":372},[248,2155,2156,2158,2160,2162,2164,2166,2169,2171,2174,2176,2178],{"class":250,"line":411},[248,2157,450],{"class":372},[248,2159,453],{"class":368},[248,2161,456],{"class":424},[248,2163,428],{"class":372},[248,2165,1141],{"class":368},[248,2167,2168],{"class":437}," uri",[248,2170,441],{"class":368},[248,2172,2173],{"class":372}," MAIN_DB ",[248,2175,504],{"class":368},[248,2177,488],{"class":372},[248,2179,479],{"class":368},[248,2181,2182,2184,2186,2188,2190,2192,2194,2196,2199,2202,2204,2207,2209,2211],{"class":250,"line":418},[248,2183,450],{"class":372},[248,2185,453],{"class":368},[248,2187,456],{"class":424},[248,2189,428],{"class":372},[248,2191,1141],{"class":368},[248,2193,2168],{"class":437},[248,2195,441],{"class":368},[248,2197,2198],{"class":372}," ANALYTICS_DB ",[248,2200,2201],{"class":368},"},",[248,2203,382],{"class":368},[248,2205,2206],{"class":257},"analytics",[248,2208,476],{"class":368},[248,2210,488],{"class":372},[248,2212,479],{"class":368},[248,2214,2215,2218],{"class":250,"line":434},[248,2216,2217],{"class":372},"    UserModule",[248,2219,479],{"class":368},[248,2221,2222,2225],{"class":250,"line":447},[248,2223,2224],{"class":372},"    EventModule",[248,2226,479],{"class":368},[248,2228,2229,2231],{"class":250,"line":463},[248,2230,496],{"class":372},[248,2232,479],{"class":368},[248,2234,2235,2237],{"class":250,"line":482},[248,2236,504],{"class":368},[248,2238,507],{"class":372},[248,2240,2241,2243,2245],{"class":250,"line":493},[248,2242,514],{"class":513},[248,2244,517],{"class":254},[248,2246,520],{"class":368},[186,2248,2249],{},"Register each model under the connection it belongs to:",[238,2251,2253],{"className":355,"code":2252,"language":357,"meta":244,"style":244},"\u002F\u002F UserModule - default connection\nMongooseModule.register([User])\n\n\u002F\u002F EventModule - named connection\nMongooseModule.register([Event], 'analytics')\n",[189,2254,2255,2260,2271,2275,2280],{"__ignoreMap":244},[248,2256,2257],{"class":250,"line":251},[248,2258,2259],{"class":1194},"\u002F\u002F UserModule - default connection\n",[248,2261,2262,2264,2266,2268],{"class":250,"line":391},[248,2263,564],{"class":372},[248,2265,453],{"class":368},[248,2267,1338],{"class":424},[248,2269,2270],{"class":372},"([User])\n",[248,2272,2273],{"class":250,"line":411},[248,2274,415],{"emptyLinePlaceholder":414},[248,2276,2277],{"class":250,"line":418},[248,2278,2279],{"class":1194},"\u002F\u002F EventModule - named connection\n",[248,2281,2282,2284,2286,2288,2291,2293,2295,2297,2299],{"class":250,"line":434},[248,2283,564],{"class":372},[248,2285,453],{"class":368},[248,2287,1338],{"class":424},[248,2289,2290],{"class":372},"([Event]",[248,2292,659],{"class":368},[248,2294,382],{"class":368},[248,2296,2206],{"class":257},[248,2298,476],{"class":368},[248,2300,507],{"class":372},[186,2302,2303,2304,2308],{},"If you need the ",[2305,2306,2307],"strong",{},"same model"," on two connections, declare two distinct tokens. They look identical to the user but DI sees them as separate providers:",[238,2310,2312],{"className":355,"code":2311,"language":357,"meta":244,"style":244},"export const User = defineModel\u003CIUser>('User', userSchema)\nexport const AnalyticsUser = defineModel\u003CIUser>('User', userSchema)\n\nMongooseModule.register([User])                      \u002F\u002F default\nMongooseModule.register([AnalyticsUser], 'analytics')\n\n\u002F\u002F In services:\nprivate users = inject(User)\nprivate analyticsUsers = inject(AnalyticsUser)\n",[189,2313,2314,2344,2375,2379,2393,2414,2418,2423,2434],{"__ignoreMap":244},[248,2315,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342],{"class":250,"line":251},[248,2317,877],{"class":364},[248,2319,1083],{"class":513},[248,2321,1086],{"class":372},[248,2323,933],{"class":368},[248,2325,858],{"class":424},[248,2327,941],{"class":368},[248,2329,944],{"class":254},[248,2331,947],{"class":368},[248,2333,428],{"class":372},[248,2335,476],{"class":368},[248,2337,1103],{"class":257},[248,2339,476],{"class":368},[248,2341,659],{"class":368},[248,2343,1110],{"class":372},[248,2345,2346,2348,2350,2353,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373],{"class":250,"line":391},[248,2347,877],{"class":364},[248,2349,1083],{"class":513},[248,2351,2352],{"class":372}," AnalyticsUser ",[248,2354,933],{"class":368},[248,2356,858],{"class":424},[248,2358,941],{"class":368},[248,2360,944],{"class":254},[248,2362,947],{"class":368},[248,2364,428],{"class":372},[248,2366,476],{"class":368},[248,2368,1103],{"class":257},[248,2370,476],{"class":368},[248,2372,659],{"class":368},[248,2374,1110],{"class":372},[248,2376,2377],{"class":250,"line":411},[248,2378,415],{"emptyLinePlaceholder":414},[248,2380,2381,2383,2385,2387,2390],{"class":250,"line":418},[248,2382,564],{"class":372},[248,2384,453],{"class":368},[248,2386,1338],{"class":424},[248,2388,2389],{"class":372},"([User])                      ",[248,2391,2392],{"class":1194},"\u002F\u002F default\n",[248,2394,2395,2397,2399,2401,2404,2406,2408,2410,2412],{"class":250,"line":434},[248,2396,564],{"class":372},[248,2398,453],{"class":368},[248,2400,1338],{"class":424},[248,2402,2403],{"class":372},"([AnalyticsUser]",[248,2405,659],{"class":368},[248,2407,382],{"class":368},[248,2409,2206],{"class":257},[248,2411,476],{"class":368},[248,2413,507],{"class":372},[248,2415,2416],{"class":250,"line":447},[248,2417,415],{"emptyLinePlaceholder":414},[248,2419,2420],{"class":250,"line":463},[248,2421,2422],{"class":1194},"\u002F\u002F In services:\n",[248,2424,2425,2428,2430,2432],{"class":250,"line":482},[248,2426,2427],{"class":372},"private users ",[248,2429,933],{"class":368},[248,2431,1418],{"class":424},[248,2433,1484],{"class":372},[248,2435,2436,2439,2441,2443],{"class":250,"line":493},[248,2437,2438],{"class":372},"private analyticsUsers ",[248,2440,933],{"class":368},[248,2442,1418],{"class":424},[248,2444,2445],{"class":372},"(AnalyticsUser)\n",[2447,2448,2449],"warning",{},[186,2450,2451,2452,2455,2456,2458],{},"Registering the ",[2305,2453,2454],{},"same"," token under two different connection names will log a warning and resolve to whichever provider was registered first. Always create a separate ",[189,2457,1236],{}," per connection.",[186,2460,2461],{},"For raw connection access on the named connection:",[238,2463,2465],{"className":355,"code":2464,"language":357,"meta":244,"style":244},"private analyticsConn = inject(mongooseConnection('analytics'))\n",[189,2466,2467],{"__ignoreMap":244},[248,2468,2469,2472,2474,2476,2478,2480,2482,2484,2486,2488],{"class":250,"line":251},[248,2470,2471],{"class":372},"private analyticsConn ",[248,2473,933],{"class":368},[248,2475,1418],{"class":424},[248,2477,428],{"class":372},[248,2479,1928],{"class":424},[248,2481,428],{"class":372},[248,2483,476],{"class":368},[248,2485,2206],{"class":257},[248,2487,476],{"class":368},[248,2489,2490],{"class":372},"))\n",[182,2492,2494],{"id":2493},"connection-lifecycle","Connection lifecycle",[2496,2497,2498,2504],"ul",{},[2499,2500,2501,2503],"li",{},[2305,2502,221],{}," - validates that no two distinct tokens claim the same model name, connects to MongoDB with retry on transient errors, compiles all registered models. If model compilation fails, the connection is closed before the error is rethrown (no leaked sockets).",[2499,2505,2506,2508],{},[2305,2507,225],{}," - closes the connection and clears all model references.",[182,2510,33],{"id":2511},"testing",[186,2513,2514,2515,441],{},"Because models are DI tokens, you override them directly in tests with ",[189,2516,2517],{},"TestApp.override()",[238,2519,2521],{"className":355,"code":2520,"language":357,"meta":244,"style":244},"import { TestApp } from '@miiajs\u002Fcore\u002Ftesting'\nimport { AppModule } from '.\u002Fapp.module.js'\nimport { User } from '.\u002Fuser\u002Fuser.model.js'\n\nconst fakeUserModel = {\n  find: () => Promise.resolve([{ _id: '1', name: 'Alice' }]),\n  create: async (doc: any) => ({ _id: 'fake', ...doc }),\n} as any\n\nconst app = await TestApp.create(AppModule)\n  .override(User, fakeUserModel)\n  .compile()\n\nconst res = await app.request('GET', '\u002Fusers')\nexpect(res.status).toBe(200)\n\nawait app.close()\n",[189,2522,2523,2543,2562,2581,2585,2596,2650,2700,2710,2714,2734,2750,2759,2763,2802,2827,2831],{"__ignoreMap":244},[248,2524,2525,2527,2529,2532,2534,2536,2538,2541],{"class":250,"line":251},[248,2526,365],{"class":364},[248,2528,369],{"class":368},[248,2530,2531],{"class":372}," TestApp",[248,2533,376],{"class":368},[248,2535,379],{"class":364},[248,2537,382],{"class":368},[248,2539,2540],{"class":257},"@miiajs\u002Fcore\u002Ftesting",[248,2542,388],{"class":368},[248,2544,2545,2547,2549,2551,2553,2555,2557,2560],{"class":250,"line":391},[248,2546,365],{"class":364},[248,2548,369],{"class":368},[248,2550,517],{"class":372},[248,2552,376],{"class":368},[248,2554,379],{"class":364},[248,2556,382],{"class":368},[248,2558,2559],{"class":257},".\u002Fapp.module.js",[248,2561,388],{"class":368},[248,2563,2564,2566,2568,2570,2572,2574,2576,2579],{"class":250,"line":411},[248,2565,365],{"class":364},[248,2567,369],{"class":368},[248,2569,1299],{"class":372},[248,2571,376],{"class":368},[248,2573,379],{"class":364},[248,2575,382],{"class":368},[248,2577,2578],{"class":257},".\u002Fuser\u002Fuser.model.js",[248,2580,388],{"class":368},[248,2582,2583],{"class":250,"line":418},[248,2584,415],{"emptyLinePlaceholder":414},[248,2586,2587,2589,2592,2594],{"class":250,"line":434},[248,2588,927],{"class":513},[248,2590,2591],{"class":372}," fakeUserModel ",[248,2593,933],{"class":368},[248,2595,584],{"class":368},[248,2597,2598,2601,2603,2605,2607,2610,2612,2614,2617,2619,2621,2623,2625,2628,2630,2632,2634,2636,2638,2641,2643,2645,2648],{"class":250,"line":447},[248,2599,2600],{"class":424},"  find",[248,2602,441],{"class":368},[248,2604,1189],{"class":368},[248,2606,581],{"class":513},[248,2608,2609],{"class":254}," Promise",[248,2611,453],{"class":368},[248,2613,576],{"class":424},[248,2615,2616],{"class":372},"([",[248,2618,1141],{"class":368},[248,2620,1776],{"class":437},[248,2622,441],{"class":368},[248,2624,382],{"class":368},[248,2626,2627],{"class":257},"1",[248,2629,476],{"class":368},[248,2631,659],{"class":368},[248,2633,1594],{"class":437},[248,2635,441],{"class":368},[248,2637,382],{"class":368},[248,2639,2640],{"class":257},"Alice",[248,2642,476],{"class":368},[248,2644,376],{"class":368},[248,2646,2647],{"class":372},"])",[248,2649,479],{"class":368},[248,2651,2652,2655,2657,2659,2661,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2685,2687,2689,2691,2694,2696,2698],{"class":250,"line":463},[248,2653,2654],{"class":424},"  create",[248,2656,441],{"class":368},[248,2658,1183],{"class":513},[248,2660,1953],{"class":368},[248,2662,2663],{"class":575},"doc",[248,2665,441],{"class":368},[248,2667,1675],{"class":254},[248,2669,488],{"class":368},[248,2671,581],{"class":513},[248,2673,1953],{"class":372},[248,2675,1141],{"class":368},[248,2677,1776],{"class":437},[248,2679,441],{"class":368},[248,2681,382],{"class":368},[248,2683,2684],{"class":257},"fake",[248,2686,476],{"class":368},[248,2688,659],{"class":368},[248,2690,1144],{"class":368},[248,2692,2693],{"class":372},"doc ",[248,2695,504],{"class":368},[248,2697,488],{"class":372},[248,2699,479],{"class":368},[248,2701,2702,2704,2707],{"class":250,"line":482},[248,2703,504],{"class":368},[248,2705,2706],{"class":364}," as",[248,2708,2709],{"class":254}," any\n",[248,2711,2712],{"class":250,"line":493},[248,2713,415],{"emptyLinePlaceholder":414},[248,2715,2716,2718,2721,2723,2725,2727,2729,2731],{"class":250,"line":501},[248,2717,927],{"class":513},[248,2719,2720],{"class":372}," app ",[248,2722,933],{"class":368},[248,2724,1760],{"class":364},[248,2726,2531],{"class":372},[248,2728,453],{"class":368},[248,2730,1626],{"class":424},[248,2732,2733],{"class":372},"(AppModule)\n",[248,2735,2736,2739,2742,2745,2747],{"class":250,"line":510},[248,2737,2738],{"class":368},"  .",[248,2740,2741],{"class":424},"override",[248,2743,2744],{"class":372},"(User",[248,2746,659],{"class":368},[248,2748,2749],{"class":372}," fakeUserModel)\n",[248,2751,2752,2754,2757],{"class":250,"line":958},[248,2753,2738],{"class":368},[248,2755,2756],{"class":424},"compile",[248,2758,1460],{"class":372},[248,2760,2761],{"class":250,"line":989},[248,2762,415],{"emptyLinePlaceholder":414},[248,2764,2765,2767,2770,2772,2774,2777,2779,2782,2784,2786,2789,2791,2793,2795,2798,2800],{"class":250,"line":1015},[248,2766,927],{"class":513},[248,2768,2769],{"class":372}," res ",[248,2771,933],{"class":368},[248,2773,1760],{"class":364},[248,2775,2776],{"class":372}," app",[248,2778,453],{"class":368},[248,2780,2781],{"class":424},"request",[248,2783,428],{"class":372},[248,2785,476],{"class":368},[248,2787,2788],{"class":257},"GET",[248,2790,476],{"class":368},[248,2792,659],{"class":368},[248,2794,382],{"class":368},[248,2796,2797],{"class":257},"\u002Fusers",[248,2799,476],{"class":368},[248,2801,507],{"class":372},[248,2803,2804,2807,2810,2812,2815,2817,2820,2822,2825],{"class":250,"line":1047},[248,2805,2806],{"class":424},"expect",[248,2808,2809],{"class":372},"(res",[248,2811,453],{"class":368},[248,2813,2814],{"class":372},"status)",[248,2816,453],{"class":368},[248,2818,2819],{"class":424},"toBe",[248,2821,428],{"class":372},[248,2823,2824],{"class":655},"200",[248,2826,507],{"class":372},[248,2828,2829],{"class":250,"line":1053},[248,2830,415],{"emptyLinePlaceholder":414},[248,2832,2833,2835,2837,2839,2842],{"class":250,"line":1068},[248,2834,1956],{"class":364},[248,2836,2776],{"class":372},[248,2838,453],{"class":368},[248,2840,2841],{"class":424},"close",[248,2843,1460],{"class":372},[186,2845,2846,2847,2850,2851,453],{},"For higher-level overrides (replace the whole service), use the standard ",[189,2848,2849],{},"TestApp.override(UserService, mock)"," pattern from ",[189,2852,385],{},[182,2854,2856],{"id":2855},"exports","Exports",[238,2858,2860],{"className":355,"code":2859,"language":357,"meta":244,"style":244},"import {\n  MongooseModule,\n  defineModel,\n  mongooseConnection,\n  type MongooseModuleOptions,\n  type ModelToken,\n  type MongooseConnectionToken,\n} from '@miiajs\u002Fmongoose'\n",[189,2861,2862,2868,2875,2882,2889,2899,2908,2917],{"__ignoreMap":244},[248,2863,2864,2866],{"class":250,"line":251},[248,2865,365],{"class":364},[248,2867,584],{"class":368},[248,2869,2870,2873],{"class":250,"line":391},[248,2871,2872],{"class":372},"  MongooseModule",[248,2874,479],{"class":368},[248,2876,2877,2880],{"class":250,"line":411},[248,2878,2879],{"class":372},"  defineModel",[248,2881,479],{"class":368},[248,2883,2884,2887],{"class":250,"line":418},[248,2885,2886],{"class":372},"  mongooseConnection",[248,2888,479],{"class":368},[248,2890,2891,2894,2897],{"class":250,"line":434},[248,2892,2893],{"class":364},"  type",[248,2895,2896],{"class":372}," MongooseModuleOptions",[248,2898,479],{"class":368},[248,2900,2901,2903,2906],{"class":250,"line":447},[248,2902,2893],{"class":364},[248,2904,2905],{"class":372}," ModelToken",[248,2907,479],{"class":368},[248,2909,2910,2912,2915],{"class":250,"line":463},[248,2911,2893],{"class":364},[248,2913,2914],{"class":372}," MongooseConnectionToken",[248,2916,479],{"class":368},[248,2918,2919,2921,2923,2925,2927],{"class":250,"line":482},[248,2920,504],{"class":368},[248,2922,379],{"class":364},[248,2924,382],{"class":368},[248,2926,191],{"class":257},[248,2928,388],{"class":368},[182,2930,2932],{"id":2931},"see-also","See also",[2496,2934,2935,2943,2951],{},[2499,2936,2937,2942],{},[194,2938,2939],{"href":140},[189,2940,2941],{},"@miiajs\u002Fpapr"," - Papr-based MongoDB integration with the same shape",[2499,2944,2945,2950],{},[194,2946,2947],{"href":136},[189,2948,2949],{},"@miiajs\u002Fdrizzle"," - SQL ORM integration following a similar pattern",[2499,2952,2953,2955],{},[194,2954,67],{"href":68}," - DI scoping and module composition",[2957,2958,2959],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":244,"searchDepth":391,"depth":391,"links":2961},[2962,2963,2964,2967,2968,2969,2970,2971,2972,2973,2974,2975],{"id":184,"depth":391,"text":27},{"id":233,"depth":391,"text":13},{"id":351,"depth":391,"text":352,"children":2965},[2966],{"id":685,"depth":411,"text":686},{"id":807,"depth":391,"text":808},{"id":1245,"depth":391,"text":1246},{"id":1390,"depth":391,"text":1391},{"id":1839,"depth":391,"text":1840},{"id":2115,"depth":391,"text":1241},{"id":2493,"depth":391,"text":2494},{"id":2511,"depth":391,"text":33},{"id":2855,"depth":391,"text":2856},{"id":2931,"depth":391,"text":2932},"MongoDB integration via Mongoose with injectable models, multi-connection support, and standard `inject()` API.","md",{},{"title":143,"description":2976},"lJKE1qMPA7kyPzL2FGoJKeUVk_1k_8ZfImGaUKevRiI",[2982,2984],{"title":139,"path":140,"stem":141,"description":2983,"children":-1},"MongoDB integration via Papr with schema validation, model registration, and standard `inject()` API.",{"title":147,"path":148,"stem":149,"description":2985,"children":-1},"Generate OpenAPI 3.1 specs and serve Swagger UI from controller metadata.",1778575274178]