"use strict" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Object . defineProperty ( exports ,  "__esModule" ,  {  value :  true  } ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								exports . Collection  =  void  0 ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  bson _1  =  require ( "./bson" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  ordered _1  =  require ( "./bulk/ordered" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  unordered _1  =  require ( "./bulk/unordered" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  change _stream _1  =  require ( "./change_stream" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  aggregation _cursor _1  =  require ( "./cursor/aggregation_cursor" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  find _cursor _1  =  require ( "./cursor/find_cursor" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  list _indexes _cursor _1  =  require ( "./cursor/list_indexes_cursor" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  error _1  =  require ( "./error" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  bulk _write _1  =  require ( "./operations/bulk_write" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  count _1  =  require ( "./operations/count" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  count _documents _1  =  require ( "./operations/count_documents" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  delete _1  =  require ( "./operations/delete" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  distinct _1  =  require ( "./operations/distinct" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  drop _1  =  require ( "./operations/drop" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  estimated _document _count _1  =  require ( "./operations/estimated_document_count" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  execute _operation _1  =  require ( "./operations/execute_operation" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  find _and _modify _1  =  require ( "./operations/find_and_modify" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  indexes _1  =  require ( "./operations/indexes" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  insert _1  =  require ( "./operations/insert" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  is _capped _1  =  require ( "./operations/is_capped" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  options _operation _1  =  require ( "./operations/options_operation" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  rename _1  =  require ( "./operations/rename" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  stats _1  =  require ( "./operations/stats" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  update _1  =  require ( "./operations/update" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  read _concern _1  =  require ( "./read_concern" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  read _preference _1  =  require ( "./read_preference" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  utils _1  =  require ( "./utils" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  write _concern _1  =  require ( "./write_concern" ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  The  * * Collection * *  class  is  an  internal  class  that  embodies  a  MongoDB  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  allowing  for  insert / find / update / delete  and  other  command  operation  on  that  MongoDB  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  * * COLLECTION  Cannot  directly  be  instantiated * * 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ public 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ example 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  ` ` ` ts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  import  {  MongoClient  }  from  'mongodb' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  interface  Pet  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *    name :  string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *    kind :  'dog'  |  'cat'  |  'fish' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  const  client  =  new  MongoClient ( 'mongodb://localhost:27017' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  const  pets  =  client . db ( ) . collection < Pet > ( 'pets' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  const  petCursor  =  pets . find ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  for  await  ( const  pet  of  petCursor )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *    console . log ( ` ${ pet . name }  is a  ${ pet . kind } ! ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  ` ` ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  Collection  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Create  a  new  Collection  instance 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ internal 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    constructor ( db ,  name ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ( 0 ,  utils _1 . checkCollectionName ) ( name ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Internal state
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . s  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            db , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            options , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            namespace :  new  utils _1 . MongoDBNamespace ( db . databaseName ,  name ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pkFactory :  db . options ? . pkFactory  ? ?  utils _1 . DEFAULT _PK _FACTORY , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            readPreference :  read _preference _1 . ReadPreference . fromOptions ( options ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            bsonOptions :  ( 0 ,  bson _1 . resolveBSONOptions ) ( options ,  db ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            readConcern :  read _concern _1 . ReadConcern . fromOptions ( options ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            writeConcern :  write _concern _1 . WriteConcern . fromOptions ( options ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  name  of  the  database  this  collection  belongs  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  dbName ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . namespace . db ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  name  of  this  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  collectionName ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . namespace . collection ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  namespace  of  this  collection ,  in  the  format  ` ${ this . dbName } . ${ this . collectionName } ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  namespace ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . namespace . toString ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  current  readConcern  of  the  collection .  If  not  explicitly  defined  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  this  collection ,  will  be  inherited  from  the  parent  DB 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  readConcern ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( this . s . readConcern  ==  null )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  this . s . db . readConcern ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . readConcern ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  current  readPreference  of  the  collection .  If  not  explicitly  defined  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  this  collection ,  will  be  inherited  from  the  parent  DB 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  readPreference ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( this . s . readPreference  ==  null )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  this . s . db . readPreference ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . readPreference ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    get  bsonOptions ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . bsonOptions ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  current  writeConcern  of  the  collection .  If  not  explicitly  defined  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  this  collection ,  will  be  inherited  from  the  parent  DB 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  writeConcern ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( this . s . writeConcern  ==  null )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  this . s . db . writeConcern ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . writeConcern ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** The current index hint for the collection */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    get  hint ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . s . collectionHint ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set  hint ( v )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . s . collectionHint  =  ( 0 ,  utils _1 . normalizeHintField ) ( v ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Inserts  a  single  document  into  MongoDB .  If  documents  passed  in  do  not  contain  the  * * _id * *  field , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  one  will  be  added  to  each  of  the  documents  missing  it  by  the  driver ,  mutating  the  document .  This  behavior 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  can  be  overridden  by  setting  the  * * forceServerObjectId * *  flag . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  doc  -  The  document  to  insert 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  insertOne ( doc ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  insert _1 . InsertOneOperation ( this ,  doc ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Inserts  an  array  of  documents  into  MongoDB .  If  documents  passed  in  do  not  contain  the  * * _id * *  field , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  one  will  be  added  to  each  of  the  documents  missing  it  by  the  driver ,  mutating  the  document .  This  behavior 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  can  be  overridden  by  setting  the  * * forceServerObjectId * *  flag . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  docs  -  The  documents  to  insert 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  insertMany ( docs ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  insert _1 . InsertManyOperation ( this ,  docs ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options  ? ?  {  ordered :  true  } ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Perform  a  bulkWrite  operation  without  a  fluent  API 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Legal  operation  types  are 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  ` insertOne ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  ` replaceOne ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  ` updateOne ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  ` updateMany ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  ` deleteOne ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  ` deleteMany ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  If  documents  passed  in  do  not  contain  the  * * _id * *  field , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  one  will  be  added  to  each  of  the  documents  missing  it  by  the  driver ,  mutating  the  document .  This  behavior 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  can  be  overridden  by  setting  the  * * forceServerObjectId * *  flag . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  operations  -  Bulk  operations  to  perform 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ throws  MongoDriverError  if  operations  is  not  an  array 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  bulkWrite ( operations ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! Array . isArray ( operations ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  error _1 . MongoInvalidArgumentError ( 'Argument "operations" must be an array of documents' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  bulk _write _1 . BulkWriteOperation ( this ,  operations ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options  ? ?  {  ordered :  true  } ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Update  a  single  document  in  a  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  document  to  update 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  update  -  The  update  operations  to  be  applied  to  the  document 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  updateOne ( filter ,  update ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  update _1 . UpdateOneOperation ( this ,  filter ,  update ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Replace  a  document  in  a  collection  with  another  document 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  document  to  replace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  replacement  -  The  Document  that  replaces  the  matching  document 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  replaceOne ( filter ,  replacement ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  update _1 . ReplaceOneOperation ( this ,  filter ,  replacement ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Update  multiple  documents  in  a  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  documents  to  update 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  update  -  The  update  operations  to  be  applied  to  the  documents 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  updateMany ( filter ,  update ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  update _1 . UpdateManyOperation ( this ,  filter ,  update ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Delete  a  document  from  a  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  document  to  remove 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  deleteOne ( filter  =  { } ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  delete _1 . DeleteOneOperation ( this ,  filter ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Delete  multiple  documents  from  a  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  documents  to  remove 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  deleteMany ( filter  =  { } ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  delete _1 . DeleteManyOperation ( this ,  filter ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Rename  the  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ remarks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  This  operation  does  not  inherit  options  from  the  Db  or  MongoClient . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  newName  -  New  name  of  of  the  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  rename ( newName ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Intentionally, we do not inherit options from parent for this operation.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  rename _1 . RenameOperation ( this ,  newName ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ... options , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            readPreference :  read _preference _1 . ReadPreference . PRIMARY 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Drop  the  collection  from  the  database ,  removing  it  permanently .  New  accesses  will  create  a  new  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  drop ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  drop _1 . DropCollectionOperation ( this . s . db ,  this . collectionName ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    async  findOne ( filter  =  { } ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . find ( filter ,  options ) . limit ( - 1 ) . batchSize ( 1 ) . next ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    find ( filter  =  { } ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  new  find _cursor _1 . FindCursor ( this . s . db . s . client ,  this . s . namespace ,  filter ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Returns  the  options  of  the  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  options ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  options _operation _1 . OptionsOperation ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Returns  if  the  collection  is  a  capped  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  isCapped ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  is _capped _1 . IsCappedOperation ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Creates  an  index  on  the  db  and  collection  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  indexSpec  -  The  field  name  or  index  specification  to  create  an  index  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ example 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` ts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  const  collection  =  client . db ( 'foo' ) . collection ( 'bar' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  await  collection . createIndex ( {  a :  1 ,  b :  - 1  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  // Alternate syntax for { c: 1, d: -1 } that ensures order of indexes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  await  collection . createIndex ( [  [ c ,  1 ] ,  [ d ,  - 1 ]  ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  // Equivalent to { e: 1 }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  await  collection . createIndex ( 'e' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  // Equivalent to { f: 1, g: 1 }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  await  collection . createIndex ( [ 'f' ,  'g' ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  // Equivalent to { h: 1, i: -1 }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  await  collection . createIndex ( [  {  h :  1  } ,  {  i :  - 1  }  ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  // Equivalent to { j: 1, k: -1, l: 2d }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  await  collection . createIndex ( [ 'j' ,  [ 'k' ,  - 1 ] ,  {  l :  '2d'  } ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  createIndex ( indexSpec ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  indexes _1 . CreateIndexOperation ( this ,  this . collectionName ,  indexSpec ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Creates  multiple  indexes  in  the  collection ,  this  method  is  only  supported  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  MongoDB  2.6  or  higher .  Earlier  version  of  MongoDB  will  throw  a  command  not  supported 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  error . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  * * Note * * :  Unlike  { @ link  Collection # createIndex |  createIndex } ,  this  function  takes  in  raw  index  specifications . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Index  specifications  are  defined  { @ link  http : //docs.mongodb.org/manual/reference/command/createIndexes/| here}.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  indexSpecs  -  An  array  of  index  specifications  to  be  created 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ example 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` ts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  const  collection  =  client . db ( 'foo' ) . collection ( 'bar' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  await  collection . createIndexes ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    // Simple index on field fizz
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      key :  {  fizz :  1  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    // wildcard index
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      key :  {  '$**' :  1  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    // named index on darmok and jalad
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      key :  {  darmok :  1 ,  jalad :  - 1  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      name :  'tanagra' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  createIndexes ( indexSpecs ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  indexes _1 . CreateIndexesOperation ( this ,  this . collectionName ,  indexSpecs ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  {  ... options ,  maxTimeMS :  undefined  } ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Drops  an  index  from  this  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  indexName  -  Name  of  the  index  to  drop . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  dropIndex ( indexName ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  indexes _1 . DropIndexOperation ( this ,  indexName ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ... ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            readPreference :  read _preference _1 . ReadPreference . primary 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Drops  all  indexes  from  this  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  dropIndexes ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  indexes _1 . DropIndexesOperation ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  the  list  of  all  indexes  information  for  the  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    listIndexes ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  new  list _indexes _cursor _1 . ListIndexesCursor ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Checks  if  one  or  more  indexes  exist  on  the  collection ,  fails  on  first  non - existing  index 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  indexes  -  One  or  more  index  names  to  check . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  indexExists ( indexes ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  indexes _1 . IndexExistsOperation ( this ,  indexes ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Retrieves  this  collections  index  info . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  indexInformation ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  indexes _1 . IndexInformationOperation ( this . s . db ,  this . collectionName ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Gets  an  estimate  of  the  count  of  documents  in  a  collection  using  collection  metadata . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  This  will  always  run  a  count  command  on  all  server  versions . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  due  to  an  oversight  in  versions  5.0 . 0 - 5.0 . 8  of  MongoDB ,  the  count  command , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  which  estimatedDocumentCount  uses  in  its  implementation ,  was  not  included  in  v1  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  the  Stable  API ,  and  so  users  of  the  Stable  API  with  estimatedDocumentCount  are 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  recommended  to  upgrade  their  server  version  to  5.0 . 9 +  or  set  apiStrict :  false  to  avoid 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  encountering  errors . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ see  { @ link  https : //www.mongodb.com/docs/manual/reference/command/count/#behavior|Count: Behavior}
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  estimatedDocumentCount ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  estimated _document _count _1 . EstimatedDocumentCountOperation ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Gets  the  number  of  documents  matching  the  filter . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  For  a  fast  count  of  the  total  documents  in  a  collection  see  { @ link  Collection # estimatedDocumentCount |  estimatedDocumentCount } . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  * * Note * * :  When  migrating  from  { @ link  Collection # count |  count }  to  { @ link  Collection # countDocuments |  countDocuments } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  the  following  query  operators  must  be  replaced : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  |  Operator  |  Replacement  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  |  -- -- -- --  |  -- -- -- -- -- -  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  |  ` $ where `    |  [ ` $ expr ` ] [ 1 ]  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  |  ` $ near `     |  [ ` $ geoWithin ` ] [ 2 ]  with  [ ` $ center ` ] [ 3 ]  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  |  ` $ nearSphere `  |  [ ` $ geoWithin ` ] [ 2 ]  with  [ ` $ centerSphere ` ] [ 4 ]  | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  [ 1 ] :  https : //docs.mongodb.com/manual/reference/operator/query/expr/
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  [ 2 ] :  https : //docs.mongodb.com/manual/reference/operator/query/geoWithin/
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  [ 3 ] :  https : //docs.mongodb.com/manual/reference/operator/query/center/#op._S_center
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  [ 4 ] :  https : //docs.mongodb.com/manual/reference/operator/query/centerSphere/#op._S_centerSphere
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  for  the  count 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ see  https : //docs.mongodb.com/manual/reference/operator/query/expr/
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ see  https : //docs.mongodb.com/manual/reference/operator/query/geoWithin/
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ see  https : //docs.mongodb.com/manual/reference/operator/query/center/#op._S_center
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ see  https : //docs.mongodb.com/manual/reference/operator/query/centerSphere/#op._S_centerSphere
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  countDocuments ( filter  =  { } ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  count _documents _1 . CountDocumentsOperation ( this ,  filter ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  distinct ( key ,  filter  =  { } ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  distinct _1 . DistinctOperation ( this ,  key ,  filter ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Retrieve  all  the  indexes  on  the  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  indexes ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  indexes _1 . IndexesOperation ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Get  all  the  collection  statistics . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  stats ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  stats _1 . CollStatsOperation ( this ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Find  a  document  and  delete  it  in  one  atomic  operation .  Requires  a  write  lock  for  the  duration  of  the  operation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  document  to  remove 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  findOneAndDelete ( filter ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  find _and _modify _1 . FindOneAndDeleteOperation ( this ,  filter ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Find  a  document  and  replace  it  in  one  atomic  operation .  Requires  a  write  lock  for  the  duration  of  the  operation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  document  to  replace 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  replacement  -  The  Document  that  replaces  the  matching  document 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  findOneAndReplace ( filter ,  replacement ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  find _and _modify _1 . FindOneAndReplaceOperation ( this ,  filter ,  replacement ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Find  a  document  and  update  it  in  one  atomic  operation .  Requires  a  write  lock  for  the  duration  of  the  operation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  used  to  select  the  document  to  update 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  update  -  Update  operations  to  be  performed  on  the  document 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  findOneAndUpdate ( filter ,  update ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  find _and _modify _1 . FindOneAndUpdateOperation ( this ,  filter ,  update ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Execute  an  aggregation  framework  pipeline  against  the  collection ,  needs  MongoDB  \ >=  2.2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  pipeline  -  An  array  of  aggregation  pipelines  to  execute 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    aggregate ( pipeline  =  [ ] ,  options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! Array . isArray ( pipeline ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  error _1 . MongoInvalidArgumentError ( 'Argument "pipeline" must be an array of aggregation stages' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  new  aggregation _cursor _1 . AggregationCursor ( this . s . db . s . client ,  this . s . namespace ,  pipeline ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Create  a  new  Change  Stream ,  watching  for  new  changes  ( insertions ,  updates ,  replacements ,  deletions ,  and  invalidations )  in  this  collection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ remarks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  watch ( )  accepts  two  generic  arguments  for  distinct  use  cases : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  The  first  is  to  override  the  schema  that  may  be  defined  for  this  specific  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  -  The  second  is  to  override  the  shape  of  the  change  stream  document  entirely ,  if  it  is  not  provided  the  type  will  default  to  ChangeStreamDocument  of  the  first  argument 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ example 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  By  just  providing  the  first  argument  I  can  type  the  change  to  be  ` ChangeStreamDocument<{ _id: number }> ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` ts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  collection . watch < {  _id :  number  } > ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    . on ( 'change' ,  change  =>  console . log ( change . _id . toFixed ( 4 ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ example 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Passing  a  second  argument  provides  a  way  to  reflect  the  type  changes  caused  by  an  advanced  pipeline . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Here ,  we  are  using  a  pipeline  to  have  MongoDB  filter  for  insert  changes  only  and  add  a  comment . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  No  need  start  from  scratch  on  the  ChangeStreamInsertDocument  type ! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  By  using  an  intersection  we  can  save  time  and  ensure  defaults  remain  the  same  type ! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` ts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  collection 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    . watch < Schema ,  ChangeStreamInsertDocument < Schema >  &  {  comment :  string  } > ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      {  $addFields :  {  comment :  'big changes'  }  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      {  $match :  {  operationType :  'insert'  }  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    . on ( 'change' ,  change  =>  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      change . comment . startsWith ( 'big' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      change . operationType  ===  'insert' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      // No need to narrow in code because the generics did that for us!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *      expectType < Schema > ( change . fullDocument ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  ` ` ` 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  pipeline  -  An  array  of  { @ link  https : //docs.mongodb.com/manual/reference/operator/aggregation-pipeline/|aggregation pipeline stages} through which to pass change stream documents. This allows for filtering (using $match) and manipulating the change stream documents.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ typeParam  TLocal  -  Type  of  the  data  being  detected  by  the  change  stream 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ typeParam  TChange  -  Type  of  the  whole  change  stream  document  emitted 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    watch ( pipeline  =  [ ] ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Allow optionally not specifying a pipeline
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! Array . isArray ( pipeline ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            options  =  pipeline ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            pipeline  =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  new  change _stream _1 . ChangeStream ( this ,  pipeline ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Initiate  an  Out  of  order  batch  write  operation .  All  operations  will  be  buffered  into  insert / update / remove  commands  executed  out  of  order . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ throws  MongoNotConnectedError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ remarks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  * * NOTE : * *  MongoClient  must  be  connected  prior  to  calling  this  method  due  to  a  known  limitation  in  this  legacy  implementation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  However ,  ` collection.bulkWrite() `  provides  an  equivalent  API  that  does  not  require  prior  connecting . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    initializeUnorderedBulkOp ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  new  unordered _1 . UnorderedBulkOperation ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Initiate  an  In  order  bulk  write  operation .  Operations  will  be  serially  executed  in  the  order  they  are  added ,  creating  a  new  operation  for  each  switch  in  types . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ throws  MongoNotConnectedError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ remarks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  * * NOTE : * *  MongoClient  must  be  connected  prior  to  calling  this  method  due  to  a  known  limitation  in  this  legacy  implementation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  However ,  ` collection.bulkWrite() `  provides  an  equivalent  API  that  does  not  require  prior  connecting . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    initializeOrderedBulkOp ( options )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  new  ordered _1 . OrderedBulkOperation ( this ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    / * * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  An  estimated  count  of  matching  documents  in  the  db  to  a  filter . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  * * NOTE : * *  This  method  has  been  deprecated ,  since  it  does  not  provide  an  accurate  count  of  the  documents 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  in  a  collection .  To  obtain  an  accurate  count  of  documents  in  the  collection ,  use  { @ link  Collection # countDocuments |  countDocuments } . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  To  obtain  an  estimated  count  of  all  documents  in  the  collection ,  use  { @ link  Collection # estimatedDocumentCount |  estimatedDocumentCount } . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ deprecated  use  { @ link  Collection # countDocuments |  countDocuments }  or  { @ link  Collection # estimatedDocumentCount |  estimatedDocumentCount }  instead 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  filter  -  The  filter  for  the  count . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  options  -  Optional  settings  for  the  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    async  count ( filter  =  { } ,  options  =  { } )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ( 0 ,  execute _operation _1 . executeOperation ) ( this . s . db . s . client ,  new  count _1 . CountOperation ( utils _1 . MongoDBNamespace . fromString ( this . namespace ) ,  filter ,  ( 0 ,  utils _1 . resolveOptions ) ( this ,  options ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								exports . Collection  =  Collection ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//# sourceMappingURL=collection.js.map