1515
1616using System ;
1717using System . Linq ;
18+ using System . Text . RegularExpressions ;
1819using MongoDB . Bson ;
1920using MongoDB . Driver ;
2021using MongoDB . Driver . Builders ;
@@ -46,12 +47,8 @@ public void TestExplainFromLinqQueryEqualsExplainFromCursor()
4647 var queryExplain = _collection . FindAs < C > ( Query . And ( Query . EQ ( "X" , 2 ) , Query . EQ ( "Y" , 1 ) ) ) . SetLimit ( 1 ) . Explain ( ) ;
4748
4849 // millis could be different, so we'll ignore that difference.
49- RemoveKey ( linqExplain , "millis" ) ;
50- RemoveKey ( queryExplain , "millis" ) ;
51- RemoveKey ( linqExplain , "executionTimeMillis" ) ;
52- RemoveKey ( queryExplain , "executionTimeMillis" ) ;
53- RemoveKey ( linqExplain , "executionTimeMillisEstimate" ) ;
54- RemoveKey ( queryExplain , "executionTimeMillisEstimate" ) ;
50+ RemoveMatchingElements ( linqExplain , new Regex ( "millis" , RegexOptions . IgnoreCase ) ) ;
51+ RemoveMatchingElements ( queryExplain , new Regex ( "millis" , RegexOptions . IgnoreCase ) ) ;
5552
5653 Assert . Equal ( linqExplain , queryExplain ) ;
5754 }
@@ -63,12 +60,8 @@ public void TestVerboseExplainFromLinqQueryEqualsVerboseExplainFromCursor()
6360 var queryExplain = _collection . FindAs < C > ( Query . And ( Query . EQ ( "X" , 2 ) , Query . EQ ( "Y" , 1 ) ) ) . SetLimit ( 1 ) . Explain ( true ) ;
6461
6562 // millis could be different, so we'll ignore that difference.
66- RemoveKey ( linqExplain , "millis" ) ;
67- RemoveKey ( queryExplain , "millis" ) ;
68- RemoveKey ( linqExplain , "executionTimeMillis" ) ;
69- RemoveKey ( queryExplain , "executionTimeMillis" ) ;
70- RemoveKey ( linqExplain , "executionTimeMillisEstimate" ) ;
71- RemoveKey ( queryExplain , "executionTimeMillisEstimate" ) ;
63+ RemoveMatchingElements ( linqExplain , new Regex ( "millis" , RegexOptions . IgnoreCase ) ) ;
64+ RemoveMatchingElements ( queryExplain , new Regex ( "millis" , RegexOptions . IgnoreCase ) ) ;
7265
7366 Assert . Equal ( linqExplain , queryExplain ) ;
7467 }
@@ -85,21 +78,28 @@ public void TestTakeZeroQueriesCannotBeExplained()
8578 Assert . Throws < NotSupportedException > ( ( ) => _collection . AsQueryable < C > ( ) . Take ( 0 ) . Explain ( ) ) ;
8679 }
8780
88- private void RemoveKey ( BsonValue value , string key )
81+ private void RemoveMatchingElements ( BsonValue value , Regex regex )
8982 {
90- if ( value . IsBsonDocument )
83+ if ( value . BsonType == BsonType . Document )
9184 {
92- value . AsBsonDocument . Remove ( key ) ;
93- foreach ( var element in value . AsBsonDocument )
85+ var document = value . AsBsonDocument ;
86+ foreach ( var name in document . Names . ToList ( ) )
9487 {
95- RemoveKey ( element . Value , key ) ;
88+ if ( regex . IsMatch ( name ) )
89+ {
90+ document . Remove ( name ) ;
91+ }
92+ else
93+ {
94+ RemoveMatchingElements ( document [ name ] , regex ) ;
95+ }
9696 }
9797 }
98- else if ( value . IsBsonArray )
98+ else if ( value . BsonType == BsonType . Array )
9999 {
100- foreach ( var item in value . AsBsonArray )
100+ foreach ( var item in value . AsBsonArray )
101101 {
102- RemoveKey ( item , key ) ;
102+ RemoveMatchingElements ( item , regex ) ;
103103 }
104104 }
105105 }
0 commit comments