15
15
16
16
using System ;
17
17
using System . Linq ;
18
+ using System . Text . RegularExpressions ;
18
19
using MongoDB . Bson ;
19
20
using MongoDB . Driver ;
20
21
using MongoDB . Driver . Builders ;
@@ -46,12 +47,8 @@ public void TestExplainFromLinqQueryEqualsExplainFromCursor()
46
47
var queryExplain = _collection . FindAs < C > ( Query . And ( Query . EQ ( "X" , 2 ) , Query . EQ ( "Y" , 1 ) ) ) . SetLimit ( 1 ) . Explain ( ) ;
47
48
48
49
// 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 ) ) ;
55
52
56
53
Assert . Equal ( linqExplain , queryExplain ) ;
57
54
}
@@ -63,12 +60,8 @@ public void TestVerboseExplainFromLinqQueryEqualsVerboseExplainFromCursor()
63
60
var queryExplain = _collection . FindAs < C > ( Query . And ( Query . EQ ( "X" , 2 ) , Query . EQ ( "Y" , 1 ) ) ) . SetLimit ( 1 ) . Explain ( true ) ;
64
61
65
62
// 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 ) ) ;
72
65
73
66
Assert . Equal ( linqExplain , queryExplain ) ;
74
67
}
@@ -85,21 +78,28 @@ public void TestTakeZeroQueriesCannotBeExplained()
85
78
Assert . Throws < NotSupportedException > ( ( ) => _collection . AsQueryable < C > ( ) . Take ( 0 ) . Explain ( ) ) ;
86
79
}
87
80
88
- private void RemoveKey ( BsonValue value , string key )
81
+ private void RemoveMatchingElements ( BsonValue value , Regex regex )
89
82
{
90
- if ( value . IsBsonDocument )
83
+ if ( value . BsonType == BsonType . Document )
91
84
{
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 ( ) )
94
87
{
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
+ }
96
96
}
97
97
}
98
- else if ( value . IsBsonArray )
98
+ else if ( value . BsonType == BsonType . Array )
99
99
{
100
- foreach ( var item in value . AsBsonArray )
100
+ foreach ( var item in value . AsBsonArray )
101
101
{
102
- RemoveKey ( item , key ) ;
102
+ RemoveMatchingElements ( item , regex ) ;
103
103
}
104
104
}
105
105
}
0 commit comments