@@ -81,6 +81,26 @@ public static IndexKeysBuilder GeoSpatialHaystack(string name, string additional
81
81
{
82
82
return new IndexKeysBuilder ( ) . GeoSpatialHaystack ( name , additionalName ) ;
83
83
}
84
+
85
+ /// <summary>
86
+ /// Sets the key name to create a spherical geospatial index on.
87
+ /// </summary>
88
+ /// <param name="name">The key name.</param>
89
+ /// <returns>The builder (so method calls can be chained).</returns>
90
+ public static IndexKeysBuilder GeoSpatialSpherical ( string name )
91
+ {
92
+ return new IndexKeysBuilder ( ) . GeoSpatialSpherical ( name ) ;
93
+ }
94
+
95
+ /// <summary>
96
+ /// Sets the key name to create a hashed index on.
97
+ /// </summary>
98
+ /// <param name="name">The key name.</param>
99
+ /// <returns>The builder (so method calls can be chained).</returns>
100
+ public static IndexKeysBuilder Hashed ( string name )
101
+ {
102
+ return new IndexKeysBuilder ( ) . Hashed ( name ) ;
103
+ }
84
104
}
85
105
86
106
/// <summary>
@@ -164,6 +184,28 @@ public IndexKeysBuilder GeoSpatialHaystack(string name, string additionalName)
164
184
return this ;
165
185
}
166
186
187
+ /// <summary>
188
+ /// Sets the key name to create a spherical geospatial index on.
189
+ /// </summary>
190
+ /// <param name="name">The key name.</param>
191
+ /// <returns>The builder (so method calls can be chained).</returns>
192
+ public IndexKeysBuilder GeoSpatialSpherical ( string name )
193
+ {
194
+ _document . Add ( name , "2dsphere" ) ;
195
+ return this ;
196
+ }
197
+
198
+ /// <summary>
199
+ /// Sets the key name to create a hashed index on.
200
+ /// </summary>
201
+ /// <param name="name">The key name.</param>
202
+ /// <returns>The builder (so method calls can be chained).</returns>
203
+ public IndexKeysBuilder Hashed ( string name )
204
+ {
205
+ _document . Add ( name , "hashed" ) ;
206
+ return this ;
207
+ }
208
+
167
209
/// <summary>
168
210
/// Returns the result of the builder as a BsonDocument.
169
211
/// </summary>
@@ -257,6 +299,32 @@ public static IndexKeysBuilder<TDocument> GeoSpatialHaystack<TMember, TAdditiona
257
299
{
258
300
return new IndexKeysBuilder < TDocument > ( ) . GeoSpatialHaystack ( memberExpression , additionalMemberExpression ) ;
259
301
}
302
+
303
+ /// <summary>
304
+ /// Sets the key name to create a spherical geospatial index on.
305
+ /// </summary>
306
+ /// <typeparam name="TMember">The type of the member.</typeparam>
307
+ /// <param name="memberExpression">The member expression.</param>
308
+ /// <returns>
309
+ /// The builder (so method calls can be chained).
310
+ /// </returns>
311
+ public static IndexKeysBuilder < TDocument > GeoSpatialSpherical < TMember > ( Expression < Func < TDocument , TMember > > memberExpression )
312
+ {
313
+ return new IndexKeysBuilder < TDocument > ( ) . GeoSpatialSpherical ( memberExpression ) ;
314
+ }
315
+
316
+ /// <summary>
317
+ /// Sets the key name to create a hashed index on.
318
+ /// </summary>
319
+ /// <typeparam name="TMember">The type of the member.</typeparam>
320
+ /// <param name="memberExpression">The member expression.</param>
321
+ /// <returns>
322
+ /// The builder (so method calls can be chained).
323
+ /// </returns>
324
+ public static IndexKeysBuilder < TDocument > Hashed < TMember > ( Expression < Func < TDocument , TMember > > memberExpression )
325
+ {
326
+ return new IndexKeysBuilder < TDocument > ( ) . Hashed ( memberExpression ) ;
327
+ }
260
328
}
261
329
262
330
/// <summary>
@@ -317,8 +385,7 @@ public IndexKeysBuilder<TDocument> Descending(params Expression<Func<TDocument,
317
385
/// </returns>
318
386
public IndexKeysBuilder < TDocument > GeoSpatial < TMember > ( Expression < Func < TDocument , TMember > > memberExpression )
319
387
{
320
- var serializationInfo = _serializationInfoHelper . GetSerializationInfo ( memberExpression ) ;
321
- _indexKeysBuilder = _indexKeysBuilder . GeoSpatial ( serializationInfo . ElementName ) ;
388
+ _indexKeysBuilder = _indexKeysBuilder . GeoSpatial ( GetElementName ( memberExpression ) ) ;
322
389
return this ;
323
390
}
324
391
@@ -332,8 +399,7 @@ public IndexKeysBuilder<TDocument> GeoSpatial<TMember>(Expression<Func<TDocument
332
399
/// </returns>
333
400
public IndexKeysBuilder < TDocument > GeoSpatialHaystack < TMember > ( Expression < Func < TDocument , TMember > > memberExpression )
334
401
{
335
- var serializationInfo = _serializationInfoHelper . GetSerializationInfo ( memberExpression ) ;
336
- _indexKeysBuilder = _indexKeysBuilder . GeoSpatialHaystack ( serializationInfo . ElementName ) ;
402
+ _indexKeysBuilder = _indexKeysBuilder . GeoSpatialHaystack ( GetElementName ( memberExpression ) ) ;
337
403
return this ;
338
404
}
339
405
@@ -349,9 +415,35 @@ public IndexKeysBuilder<TDocument> GeoSpatialHaystack<TMember>(Expression<Func<T
349
415
/// </returns>
350
416
public IndexKeysBuilder < TDocument > GeoSpatialHaystack < TMember , TAdditionalMember > ( Expression < Func < TDocument , TMember > > memberExpression , Expression < Func < TDocument , TAdditionalMember > > additionalMemberExpression )
351
417
{
352
- var serializationInfo = _serializationInfoHelper . GetSerializationInfo ( memberExpression ) ;
353
- var additionalSerializationInfo = _serializationInfoHelper . GetSerializationInfo ( additionalMemberExpression ) ;
354
- _indexKeysBuilder = _indexKeysBuilder . GeoSpatialHaystack ( serializationInfo . ElementName , additionalSerializationInfo . ElementName ) ;
418
+ _indexKeysBuilder = _indexKeysBuilder . GeoSpatialHaystack ( GetElementName ( memberExpression ) , GetElementName ( additionalMemberExpression ) ) ;
419
+ return this ;
420
+ }
421
+
422
+ /// <summary>
423
+ /// Sets the key name to create a spherical geospatial index on.
424
+ /// </summary>
425
+ /// <typeparam name="TMember">The type of the member.</typeparam>
426
+ /// <param name="memberExpression">The member expression.</param>
427
+ /// <returns>
428
+ /// The builder (so method calls can be chained).
429
+ /// </returns>
430
+ public IndexKeysBuilder < TDocument > GeoSpatialSpherical < TMember > ( Expression < Func < TDocument , TMember > > memberExpression )
431
+ {
432
+ _indexKeysBuilder = _indexKeysBuilder . GeoSpatialSpherical ( GetElementName ( memberExpression ) ) ;
433
+ return this ;
434
+ }
435
+
436
+ /// <summary>
437
+ /// Sets the key name to create a hashed index on.
438
+ /// </summary>
439
+ /// <typeparam name="TMember">The type of the member.</typeparam>
440
+ /// <param name="memberExpression">The member expression.</param>
441
+ /// <returns>
442
+ /// The builder (so method calls can be chained).
443
+ /// </returns>
444
+ public IndexKeysBuilder < TDocument > Hashed < TMember > ( Expression < Func < TDocument , TMember > > memberExpression )
445
+ {
446
+ _indexKeysBuilder = _indexKeysBuilder . Hashed ( GetElementName ( memberExpression ) ) ;
355
447
return this ;
356
448
}
357
449
@@ -379,11 +471,14 @@ protected override void Serialize(BsonWriter bsonWriter, Type nominalType, IBson
379
471
}
380
472
381
473
// private methods
474
+ private string GetElementName < TMember > ( Expression < Func < TDocument , TMember > > memberExpression )
475
+ {
476
+ return _serializationInfoHelper . GetSerializationInfo ( memberExpression ) . ElementName ;
477
+ }
478
+
382
479
private IEnumerable < string > GetElementNames ( IEnumerable < Expression < Func < TDocument , object > > > memberExpressions )
383
480
{
384
- return memberExpressions
385
- . Select ( x => _serializationInfoHelper . GetSerializationInfo ( x ) )
386
- . Select ( x => x . ElementName ) ;
481
+ return memberExpressions . Select ( x => GetElementName ( x ) ) ;
387
482
}
388
483
}
389
484
}
0 commit comments