@@ -688,6 +688,87 @@ fn create_list_drop_indexes() {
688
688
assert_eq ! ( 1 , results. len( ) ) ;
689
689
}
690
690
691
+ #[ test]
692
+ fn create_text_hashed_2d_2dsphere_index ( ) {
693
+ let client = Client :: connect ( "localhost" , 27017 ) . unwrap ( ) ;
694
+ let db = client. db ( "test-client-coll" ) ;
695
+ let coll = db. collection ( "create_text_hashed_2d_2dsphere_index" ) ;
696
+
697
+ coll. create_index ( doc ! {
698
+ "a" => "text"
699
+ } , None ) . expect ( "Failed to create text indexes" ) ;
700
+
701
+ coll. create_index ( doc ! {
702
+ "b" => "hashed"
703
+ } , None ) . expect ( "Failed to create hashed indexes" ) ;
704
+
705
+ coll. create_index ( doc ! {
706
+ "c" => "2d"
707
+ } , None ) . expect ( "Failed to create 2d indexes" ) ;
708
+
709
+ coll. create_index ( doc ! {
710
+ "d" => "2dsphere"
711
+ } , None ) . expect ( "Failed to create 2dsphere indexes" ) ;
712
+ }
713
+
714
+ #[ test]
715
+ fn block_ill_formed_index_models ( ) {
716
+ assert ! ( IndexModel :: new( doc!{ "test" => 1.1 } , None ) . name( ) . is_err( ) ) ;
717
+ assert ! ( IndexModel :: new( doc!{ "test" => 1i64 } , None ) . name( ) . is_err( ) ) ;
718
+ assert ! ( IndexModel :: new( doc!{ "test" => "arbitrystr" } , None ) . name( ) . is_err( ) ) ;
719
+ }
720
+
721
+ #[ test]
722
+ fn create_query_text_index ( ) {
723
+ let client = Client :: connect ( "localhost" , 27017 ) . unwrap ( ) ;
724
+ let db = client. db ( "test-client-coll" ) ;
725
+ let coll = db. collection ( "create_query_text_index" ) ;
726
+
727
+ coll. drop ( ) . expect ( "Failed to drop collection" ) ;
728
+
729
+ let mut index_opt = IndexOptions :: new ( ) ;
730
+ index_opt. weights = Some ( doc ! {
731
+ "title" => 10 ,
732
+ "content" => 5
733
+ } ) ;
734
+ coll. create_index ( doc ! {
735
+ "title" => "text" ,
736
+ "content" => "text"
737
+ } ,
738
+ Some ( index_opt) ) . unwrap ( ) ;
739
+
740
+ let doc1 = doc ! { "title" => "keyword keyword keyword" , "content" => "nonkeyword" , "id" => 1 } ;
741
+ let doc2 = doc ! { "title" => "nonkeyword" , "content" => "keyword keyword keyword" , "id" => 2 } ;
742
+ let doc3 = doc ! { "title" => "nonkeyword" , "content" => "nonkeyword" , "id" => 3 } ;
743
+
744
+ coll. insert_many ( vec ! [ doc1. clone( ) , doc2. clone( ) , doc3. clone( ) ] , None ) . unwrap ( ) ;
745
+
746
+ let count = coll. count ( Some ( doc ! { "$text" => { "$search" => "keyword" } } ) , None ) . unwrap ( ) ;
747
+ assert_eq ! ( count, 2 ) ;
748
+
749
+ let mut opts = FindOptions :: new ( ) ;
750
+ opts. projection = Some ( doc ! { "score" => { "$meta" => "textScore" } } ) ;
751
+ opts. sort = Some ( doc ! { "score" => { "$meta" => "textScore" } } ) ;
752
+
753
+ let mut cursor = coll. find (
754
+ Some ( doc ! { "$text" => { "$search" => "keyword" } } ) ,
755
+ Some ( opts) ) . unwrap ( ) ;
756
+ let results = cursor. next_n ( 2 ) . unwrap ( ) ;
757
+
758
+ match results[ 0 ] . get ( "id" ) . unwrap ( ) {
759
+ & Bson :: I32 ( id) => assert_eq ! ( 1 , id) ,
760
+ _ => panic ! ( "Why is id not a i32?" )
761
+ } ;
762
+
763
+ match results[ 1 ] . get ( "id" ) . unwrap ( ) {
764
+ & Bson :: I32 ( id) => assert_eq ! ( 2 , id) ,
765
+ _ => panic ! ( "Why is id not a i32?" )
766
+ } ;
767
+
768
+ let count = coll. count ( Some ( doc ! { "$text" => { "$search" => "keyword nonkeyword" } } ) , None ) . unwrap ( ) ;
769
+ assert_eq ! ( count, 3 ) ;
770
+ }
771
+
691
772
#[ test]
692
773
fn drop_all_indexes ( ) {
693
774
let client = Client :: connect ( "localhost" , 27017 ) . unwrap ( ) ;
0 commit comments