public static Task <TEntity> AddToArrayWithCount <ArrDataType>( IMongoDbSet <TEntity> entity, FilterDefinition <TEntity> filter, FieldDefinition <TEntity> dbArrayFieldName, ArrDataType[] insertValues, ArrDataType[] initialValues, FieldDefinition <TEntity, int> countFieldDefinition ) { bool isIncCountEnabled = countFieldDefinition.ToString() != ""; // If countFieldDefinition is blank, we dont enable count List <ArrDataType> uniqueInserts = new List <ArrDataType>(); foreach (ArrDataType iVal in insertValues) { if (Array.IndexOf(initialValues, iVal) == -1) { uniqueInserts.Add(iVal); } } int count = uniqueInserts.Count(); if (count > 0) { UpdateDefinition <TEntity> update = Builders <TEntity> .Update .PushEach(dbArrayFieldName, uniqueInserts) .Inc(countFieldDefinition, uniqueInserts.Count()); return(entity.UpdateOneAsync(filter, update)); } return(null); }
public static Task <TEntity> AddToArray <ArrDataType>( IMongoDbSet <TEntity> entity, FilterDefinition <TEntity> filter, FieldDefinition <TEntity> dbArrayFieldName, ArrDataType[] insertValues ) { UpdateDefinition <TEntity> update = Builders <TEntity> .Update.AddToSetEach(dbArrayFieldName, insertValues); Task <TEntity> e = entity.UpdateOneAsync(filter, update); return(e); }
public static Task <TEntity> UpdateInArray <ArrDataType>( IMongoDbSet <TEntity> entity, FilterDefinition <TEntity> filter, FieldDefinition <TEntity> dbArrayFieldName, ArrDataType oldFieldValue, ArrDataType newFieldValue ) { RemoveFromArray(entity, filter, dbArrayFieldName, new ArrDataType[] { oldFieldValue }); Task <TEntity> element = AddToArray <ArrDataType>(entity, filter, dbArrayFieldName, new ArrDataType[] { newFieldValue }); return(element); }
public static Task <TEntity> RemoveFromArray <ArrDataType>( IMongoDbSet <TEntity> entity, FilterDefinition <TEntity> filter, FieldDefinition <TEntity> dbArrayFieldName, ArrDataType[] fieldValue ) { UpdateDefinition <TEntity> update = Builders <TEntity> .Update.PullAll( dbArrayFieldName, fieldValue ); return(entity.UpdateOneAsync(filter, update)); }
public InstaPostContext( DbContextOptions <InstaPostContext> options, IMongoDbSet <Bookmarks> Bookmarks, IMongoDbSet <Followers> Followers, IMongoDbSet <Likes> Likes, IMongoDbSet <Reports> Reports, IMongoDbSet <Tags> Tags ) : base(options) { this.Bookmarks = Bookmarks; this.Followers = Followers; this.Likes = Likes; this.Reports = Reports; this.Tags = Tags; }
public static IQueryable <TEntity> SearchGeoNear <TEntity, TCoordinates>(this IMongoDbSet <TEntity> dbSet, Expression <Func <TEntity, object> > targetField, GeoJsonPoint <TCoordinates> point, Expression <Func <TEntity, object> > distanceResultField = null, double?maxDistance = null, double?minDistance = null) where TEntity : class where TCoordinates : GeoJsonCoordinates { var entitySerializer = BsonSerializer.LookupSerializer <TEntity>(); var keyExpressionField = new ExpressionFieldDefinition <TEntity>(targetField); var keyStringField = keyExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry); var distanceFieldName = "Distance"; if (distanceResultField != null) { var distanceResultExpressionField = new ExpressionFieldDefinition <TEntity>(distanceResultField); var distanceResultStringField = distanceResultExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry); distanceFieldName = distanceResultStringField.FieldName; } var geoNearSettings = new BsonDocument { { "near", point.ToBsonDocument() }, { "key", keyStringField.FieldName }, { "distanceField", distanceFieldName }, //Note: Limit here is maxed as an operational courtesy as future versions will eliminate it (see Jira SERVER-22949) // Additionally, $geoNear operations still have a 16MB document limit in aggregation (see Jira SERVER-18965) { "limit", int.MaxValue } }; if (maxDistance.HasValue) { geoNearSettings.Add("maxDistance", maxDistance.Value); } if (minDistance.HasValue) { geoNearSettings.Add("minDistance", minDistance.Value); } var stage = new BsonDocument { { "$geoNear", geoNearSettings } }; var originalProvider = dbSet.Provider as IMongoFrameworkQueryProvider <TEntity>; var provider = new MongoFrameworkQueryProvider <TEntity>(originalProvider, stage); return(new MongoFrameworkQueryable <TEntity>(provider)); }
public static IQueryable <TEntity> SearchGeoNear <TEntity, TCoordinates>(this IMongoDbSet <TEntity> dbSet, Expression <Func <TEntity, object> > targetField, GeoJsonPoint <TCoordinates> point, Expression <Func <TEntity, object> > distanceResultField = null, double?maxDistance = null, double?minDistance = null) where TEntity : class where TCoordinates : GeoJsonCoordinates { var entitySerializer = BsonSerializer.LookupSerializer <TEntity>(); var keyExpressionField = new ExpressionFieldDefinition <TEntity>(targetField); var keyStringField = keyExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry); var distanceFieldName = "Distance"; if (distanceResultField != null) { var distanceResultExpressionField = new ExpressionFieldDefinition <TEntity>(distanceResultField); var distanceResultStringField = distanceResultExpressionField.Render(entitySerializer, BsonSerializer.SerializerRegistry); distanceFieldName = distanceResultStringField.FieldName; } var geoNearSettings = new BsonDocument { { "near", point.ToBsonDocument() }, { "key", keyStringField.FieldName }, { "distanceField", distanceFieldName } }; if (maxDistance.HasValue) { geoNearSettings.Add("maxDistance", maxDistance.Value); } if (minDistance.HasValue) { geoNearSettings.Add("minDistance", minDistance.Value); } var stage = new BsonDocument { { "$geoNear", geoNearSettings } }; var originalProvider = dbSet.Provider as IMongoFrameworkQueryProvider <TEntity>; var provider = new MongoFrameworkQueryProvider <TEntity>(originalProvider, stage); return(new MongoFrameworkQueryable <TEntity>(provider)); }
public static IEnumerable <int> ArrayIntSplice( IMongoDbSet <TEntity> entity, string dbArrayFieldName, FilterDefinition <TEntity> filter, int count = 10, int skip = 0 ) { IFindFluent <TEntity, TEntity> query = entity.Find(filter); ProjectionDefinition <TEntity> projection = Builders <TEntity> .Projection.Slice(dbArrayFieldName, skip, count); return(query.FirstOrDefault() == null ? null : query .Project(projection) .FirstOrDefault() .GetValue(dbArrayFieldName) .AsBsonArray .Select(e => e.ToInt32())); }
public static bool CheckElementExists <FieldDataType>( IMongoDbSet <TEntity> entity, FieldDefinition <TEntity> dbArrayFieldName, FieldDataType element, FieldDefinition <TEntity> filterIdFieldName, FieldDataType filterIdFieldValue ) where FieldDataType : struct { FilterDefinition <TEntity> arrayFilter = Builders <TEntity> .Filter.ElemMatch <TEntity>(dbArrayFieldName, Builders <TEntity> .Filter.Eq(dbArrayFieldName.ToString(), element)); FilterDefinition <TEntity> filter = filterIdFieldName == null ? arrayFilter : Builders <TEntity> .Filter .Eq(filterIdFieldName.ToString(), filterIdFieldValue) & arrayFilter; long count = entity.Find(filter) .Project(Builders <TEntity> .Projection.Include("_id")) .Count(); return(count == 0); }
public static IQueryable <TEntity> SearchText <TEntity>(this IMongoDbSet <TEntity> dbSet, string search) where TEntity : class { return(dbSet.WhereFilter(b => b.Text(search))); }