Пример #1
0
        public override async ETTask Run()
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();

            try
            {
                int      s  = 0;
                string[] st = LSS.Split('|');
                Json = st[0];
                int.TryParse(st[1], out s);
                skip = s;
                int.TryParse(st[2], out s);
                limit = s;
                sort  = st[3];
                //Log.Debug("DBQueryLSSJsonTask Json: " + Json);
                //Log.Debug("DBQueryLSSJsonTask 从第几个拿skip: " + skip);
                //Log.Debug("DBQueryLSSJsonTask 获取多少个limit: "+limit);
                //Log.Debug("DBQueryLSSJsonTask Sort: "+ sort);
                // 执行查询数据库任务
                FilterDefinition <ComponentWithId> filterDefinition = new JsonFilterDefinition <ComponentWithId>(this.Json);
                IAsyncCursor <ComponentWithId>     cursor           = await dbComponent.GetCollection(this.CollectionName).Find(filterDefinition).Skip(skip).Limit(limit).Sort(sort).ToCursorAsync();

                List <ComponentWithId> components = await cursor.ToListAsync();

                this.Tcs.SetResult(components);
            }
            catch (Exception e)
            {
                this.Tcs.SetException(new Exception($"查询数据库异常! {CollectionName} {this.Json}", e));
            }
        }
Пример #2
0
        public ItemList Query(string collection, DataQuery query)
        {
            FilterDefinition <BsonDocument> filter = FilterDefinition <BsonDocument> .Empty;

            if (query.RawQuery != null)
            {
                filter = new JsonFilterDefinition <BsonDocument>(query.RawQuery);
            }

            InvokeAlterQuery(collection, filter);

            IFindFluent <BsonDocument, BsonDocument> results = _mongoService
                                                               .GetCollection <BsonDocument>(collection).Find <BsonDocument>(filter)
                                                               .Skip((query.PageNumber - 1) * query.PageSize)
                                                               .Limit(query.PageSize);

            long count = Count(collection, filter);

            List <BsonDocument> list = results.ToList();

            //sanitize id format
            foreach (BsonDocument item in list)
            {
                item["_id"] = item["_id"].ToString();
            }

            string json = list.ToJson(js);

            return(new ItemList(JArray.Parse(json), (int)count, query.PageNumber, query.PageSize));
        }
Пример #3
0
        public ItemList Query(string collection, DataQuery query)
        {
            FilterDefinition <BsonDocument> filter = FilterDefinition <BsonDocument> .Empty;
            var dataContext = new Dictionary <string, object>();

            dataContext["expando"] = query.Expando;

            if (query.RawQuery != null)
            {
                filter = new JsonFilterDefinition <BsonDocument>(query.RawQuery);
            }

            InvokeAlterQuery(collection, filter);

            IFindFluent <BsonDocument, BsonDocument> results = _mongoService
                                                               .GetCollection <BsonDocument>(collection).Find <BsonDocument>(filter)
                                                               .Skip((query.PageNumber - 1) * query.PageSize)
                                                               .Limit(query.PageSize);

            if (query.Sort != null)
            {
                var sort = new SortDefinitionBuilder <BsonDocument>();
                SortDefinition <BsonDocument> sortDef = null;
                foreach (var sortable in query.Sort)
                {
                    FieldDefinition <BsonDocument> field = sortable.Field;

                    if (sortable.Ascending)
                    {
                        sortDef = (sortDef == null) ? sort.Ascending(field) : sortDef.Ascending(field);
                    }
                    else
                    {
                        sortDef = (sortDef == null) ? sort.Descending(field) : sortDef.Descending(field);
                    }
                }
                results = results.Sort(sortDef);
            }

            long count = Count(collection, filter);

            List <BsonDocument> list = results.ToList();

            //sanitize id format
            foreach (BsonDocument item in list)
            {
                item["_id"] = item["_id"].ToString();
            }

            string json   = list.ToJson(js);
            var    result = JArray.Parse(json);

            for (int i = 0; i < result.Count; i++)
            {
                var node = (JObject)result[i];
                InvokeProcess(collection, ref node, PipelineStage.PostOperation, DataOperation.Read, dataContext);
            }
            return(new ItemList(result, (int)count, query.PageNumber, query.PageSize));
        }
        public static async Task <long> QueryJsonCount <T>(this DBProxyComponent self, string json)
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();
            FilterDefinition <ComponentWithId> filterDefinition = new JsonFilterDefinition <ComponentWithId>(json);
            long count = await dbComponent.GetCollection(typeof(T).Name).CountAsync(filterDefinition);

            return(count);
        }
Пример #5
0
 public async void GetCollection123456(string name)
 {
     IMongoCollection <ComponentWithId>             ins = this.database.GetCollection <ComponentWithId>(name);
     FilterDefinition <ComponentWithId>             filterDefinition = new JsonFilterDefinition <ComponentWithId>("{}");
     SortDefinition <ComponentWithId>               sortDefinition   = new JsonSortDefinition <ComponentWithId>("{\"UserId\":1}");
     IFindFluent <ComponentWithId, ComponentWithId> s = ins.Find(filterDefinition).Sort(sortDefinition).Limit(1);
     List <ComponentWithId> components33 = await s.ToCursor().ToListAsync();
 }
        public static async Task <List <T> > QueryJsonDB <T>(this DBProxyComponent self, string json) where T : ComponentWithId
        {
            DBComponent          dbComponent      = Game.Scene.GetComponent <DBComponent>();
            FilterDefinition <T> filterDefinition = new JsonFilterDefinition <T>(json);
            IAsyncCursor <T>     cursor           = await dbComponent.GetDBDataCollection <T>(typeof(T).Name).FindAsync(filterDefinition);

            List <T> components = await cursor.ToListAsync();

            return(components);
        }
        public static async Task <List <T> > QueryJsonDBInfos <T>(this DBProxyComponent self, string time, long uid)
        {
            DBComponent          dbComponent      = Game.Scene.GetComponent <DBComponent>();
            FilterDefinition <T> filterDefinition = new JsonFilterDefinition <T>($"{{CreateTime:/^{time}/,Uid:{uid}}}");
            IAsyncCursor <T>     cursor           = await dbComponent.GetDBDataCollection <T>(typeof(T).Name).FindAsync(filterDefinition);

            List <T> components = await cursor.ToListAsync();

            return(components);
        }
        /// <summary>	Gets all items in this collection asynchronously. </summary>
        /// <param name="jsonFilterDefinition">	A definition to filter in a json string the results. Defaults to an empty filter.</param>
        /// <param name="jsonSortingDefinition">	The sorting definition in a json string for the result. Defaults to sort ascending by Id.</param>
        /// <param name="page">	The requested page number. </param>
        /// <param name="pageSize">	The number of items per page.</param>
        /// <returns>
        ///     An list that allows foreach to be used to process all items in this collection.
        /// </returns>
        public virtual async Task <long> Count(string jsonFilterDefinition)
        {
            JsonFilterDefinition <TEntity> filter = null;

            if (!string.IsNullOrEmpty(jsonFilterDefinition))
            {
                filter = new JsonFilterDefinition <TEntity>(jsonFilterDefinition);
            }
            return(await Count(filterDefinition : filter));
        }
Пример #9
0
        public long Count(string collection, string query)
        {
            FilterDefinition <BsonDocument> filter = FilterDefinition <BsonDocument> .Empty;

            if (!string.IsNullOrWhiteSpace(query))
            {
                filter = new JsonFilterDefinition <BsonDocument>(query);
            }
            return(Count(collection, filter));
        }
Пример #10
0
        public static async ETTask <List <T> > QueryJson <T>(this DBComponent self, long taskId, string json, string collection = null) where T : Entity
        {
            using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.DB, RandomHelper.RandInt64() % DBComponent.TaskCount))
            {
                FilterDefinition <T> filterDefinition = new JsonFilterDefinition <T>(json);
                IAsyncCursor <T>     cursor           = await self.GetCollection <T>(collection).FindAsync(filterDefinition);

                return(await cursor.ToListAsync());
            }
        }
Пример #11
0
        public async Task <IEnumerable <Report> > GetReportsForUserPage(string userName, int pageNumber, int reportsInPage)
        {
            FilterDefinition <Report> reportFilter = new JsonFilterDefinition <Report>($"{{FirstUserName: \"{userName}\"}}");

            return(await GetPage(
                       reportFilter,
                       pageNumber,
                       reportsInPage
                       ).ConfigureAwait(false));
        }
Пример #12
0
 public static void TestMONGO()
 {
     foreach (var file in Directory.EnumerateFiles(@"C:\Users\micjan11\Desktop\db\mongo\"))
     {
         var command = File.ReadAllText(file);
         var xd      = new JsonFilterDefinition <Record>(command);
         var sum     = Test(() => ReadFromMongoDB(xd), 1);
         Console.WriteLine($"MONGO {file}: {sum}");
     }
 }
        /// <summary>	Gets all items in this collection asynchronously. </summary>
        /// <param name="jsonFilterDefinition">	A definition to filter in a json string the results. Defaults to an empty filter.</param>
        /// <returns>
        ///     An list that allows foreach to be used to process all items in this collection.
        /// </returns>
        public virtual async Task <IList <TEntity> > GetAll(string jsonFilterDefinition)
        {
            JsonFilterDefinition <TEntity> filter = null;

            if (!string.IsNullOrEmpty(jsonFilterDefinition))
            {
                filter = new JsonFilterDefinition <TEntity>(jsonFilterDefinition);
            }

            return(await GetAll(filterDefinition : filter));
        }
Пример #14
0
        async Task UpdateLastReadTime(string id, DateTimeOffset now)
        {
            var gridFsFileInfo = await GetGridFsFileInfo(id);

            gridFsFileInfo.Metadata[MetadataKeys.ReadTime] = now.ToString("o");

            var files = _database.GetCollection <BsonDocument>($"{_bucketName}.files");

            var criteria = new JsonFilterDefinition <BsonDocument>($@"{{'filename': '{id}'}}");
            var update   = new JsonUpdateDefinition <BsonDocument>($@"{{$set: {{'metadata.{MetadataKeys.ReadTime}': '{now:o}'}} }}");

            await files.UpdateOneAsync(criteria, update);
        }
        public override async ETTask Run()
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();

            try
            {
                FilterDefinition <ComponentWithId> filterDefinition = new JsonFilterDefinition <ComponentWithId>(this.Json);
                long count = await dbComponent.GetCollection(this.CollectionName).CountDocumentsAsync(filterDefinition);

                this.Tcs.SetResult(count);
            }
            catch (Exception e)
            {
                this.Tcs.SetException(new Exception($"查询数据库异常! {CollectionName} {this.Json}", e));
            }
        }
Пример #16
0
        public override async ETTask Run()
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();

            try
            {
                FilterDefinition <ComponentWithId> filter = new JsonFilterDefinition <ComponentWithId>(this.Json);
                await dbComponent.GetCollection(this.CollectionName).DeleteManyAsync(filter);

                this.Tcs.SetResult();
            }
            catch (Exception e)
            {
                this.Tcs.SetException(new Exception($"删除数据库异常! {CollectionName} {this.Json}", e));
            }
        }
Пример #17
0
        public override async Task Run()
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();

            try
            {
                // 执行查询数据库任务
                FilterDefinition <Component> filterDefinition = new JsonFilterDefinition <Component>(this.Json);
                List <Component>             disposers        = await dbComponent.GetCollection(this.CollectionName).FindAsync(filterDefinition).Result.ToListAsync();

                this.Tcs.SetResult(disposers);
            }
            catch (Exception e)
            {
                this.Tcs.SetException(new Exception($"查询数据库异常! {CollectionName} {this.Json}", e));
            }
        }
        /// <summary>	Gets all items in this collection asynchronously. </summary>
        /// <param name="jsonFilterDefinition">	A definition to filter in a json string the results. Defaults to an empty filter.</param>
        /// <param name="jsonSortingDefinition">	The sorting definition in a json string for the result. Defaults to sort ascending by Id.</param>
        /// <param name="page">	The requested page number. </param>
        /// <param name="pageSize">	The number of items per page.</param>
        /// <returns>
        ///     An list that allows foreach to be used to process all items in this collection.
        /// </returns>
        public virtual async Task <IList <TEntity> > GetAll(string jsonFilterDefinition, string jsonSortingDefinition, int?page = null, int?pageSize = null)
        {
            JsonFilterDefinition <TEntity> filter = null;

            if (!string.IsNullOrEmpty(jsonFilterDefinition))
            {
                filter = new JsonFilterDefinition <TEntity>(jsonFilterDefinition);
            }

            JsonSortDefinition <TEntity> sorting = null;

            if (!string.IsNullOrEmpty(jsonSortingDefinition))
            {
                sorting = new JsonSortDefinition <TEntity>(jsonSortingDefinition);
            }

            return(await GetAll(filterDefinition : filter, sortDefinition : sorting, page : page, pageSize : pageSize));
        }
Пример #19
0
        public async Task <object> DeleteBOTsAsync(List <string> bots)
        {
            var deleteBOTs = new List <string>();

            foreach (var name in bots)
            {
                //var filter = Builders<BOT>.Filter
                //    .Where(bo => bo.Name.ToLower() == name.ToLower());
                var jsonFilter   = $"{{'name':{{'$regex':'^{name}$','$options':'i'}}}}";
                var filter       = new JsonFilterDefinition <MongoDB.Bson.BsonDocument>(jsonFilter);
                var deleteResult = await this.BOTBsonDocumentCollection.DeleteOneAsync(filter);

                if (deleteResult.IsAcknowledged && deleteResult.DeletedCount > 0)
                {
                    deleteBOTs.Add(name);
                }
            }
            return(deleteBOTs);
        }
Пример #20
0
        public override async ETTask Run()
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();

            try
            {
                // 执行查询数据库任务
                FilterDefinition <ComponentWithId> filterDefinition = new JsonFilterDefinition <ComponentWithId>(this.Json);
                IAsyncCursor <ComponentWithId>     cursor           = await dbComponent.GetCollection(this.CollectionName).FindAsync(filterDefinition);

                List <ComponentWithId> components = await cursor.ToListAsync();

                this.Tcs.SetResult(components);
            }
            catch (Exception e)
            {
                this.Tcs.SetException(new Exception($"查询数据库异常! {CollectionName} {this.Json}", e));
            }
        }
Пример #21
0
        public async ValueTask <IPaginationCollection <dynamic> > QueryAsync(
            string query,
            int?skip                                = null,
            int?limit                               = null,
            bool?withCount                          = null,
            string sortField                        = null,
            SortDirection?sortDirection             = null,
            IDictionary <string, bool> selectFields = null)
        {
            try
            {
                query = ISODateHelper.EnsureDatetimeFieldsToISODate(query);
                Console.WriteLine("Executing query:");
                Console.WriteLine(query);

                var filterDefinition = new JsonFilterDefinition <dynamic>(query);
                return(await this.ExecuteQueryAsync(
                           filterDefinition,
                           skip,
                           limit,
                           withCount,
                           sortField,
                           sortDirection,
                           selectFields));
            }
            catch (MongoCommandException ex)
            {
                switch (ex.Code)
                {
                case 31249:
                    throw new SelectQueryPathCollisionException(ex);

                case 31254:
                    throw new SelectQueryInclusionException(ex);

                default:
                    throw;
                }
            }
        }
Пример #22
0
        public async Task <object> SaveBOTsAsync(List <BOT> bots)
        {
            var saveBOTs      = new List <string>();
            var updateOptions = new UpdateOptions {
                IsUpsert = true
            };

            foreach (var doc in bots)
            {
                //var filter = Builders<BOT>.Filter.Where(bot=>bot.Name.ToLower() == doc.Name.ToLower());
                //var saveResult = await this.BOTCollection.ReplaceOneAsync(filter, doc, updateOptions);
                var jsonFilter = $"{{'name':{{'$regex':'^{doc.Name}$','$options':'i'}}}}";
                var filter     = new JsonFilterDefinition <MongoDB.Bson.BsonDocument>(jsonFilter);
                var saveResult = await this.BOTBsonDocumentCollection.ReplaceOneAsync(filter, this.ConvertFrom <BOT>(doc), updateOptions);

                if (saveResult.IsAcknowledged && (saveResult.ModifiedCount > 0 || saveResult.UpsertedId != null))
                {
                    saveBOTs.Add(doc.Name);
                }
            }
            return(saveBOTs);
        }
Пример #23
0
        public override async ETTask Run()
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();

            try
            {
                BsonDocument bsons     = BsonSerializer.Deserialize <BsonDocument>(this.Json);
                string       QueryJson = bsons["QueryJson"].ToJson();
                var          set       = bsons["UpdateJson"];
                bsons.Clear();
                bsons["$set"] = set;
                string UpdateJson = bsons.ToJson();
                FilterDefinition <ComponentWithId> queryFilter  = new JsonFilterDefinition <ComponentWithId>(QueryJson);
                UpdateDefinition <ComponentWithId> updateFilter = new JsonUpdateDefinition <ComponentWithId>(UpdateJson);
                await dbComponent.GetCollection(this.CollectionName).UpdateOneAsync(queryFilter, updateFilter);

                this.Tcs.SetResult();
            }
            catch (Exception e)
            {
                this.Tcs.SetException(new Exception($"更改数据库异常! {CollectionName} {this.Json}", e));
            }
        }
        public async Task <IEnumerable <Status> > GetAllSavedAsync(StatusListParams statusListParams)
        {
            var userFilter = new ExpressionFilterDefinition <Status>(
                x => x.SavedByUserId == statusListParams.SavedByUserId &&
                x.CreatedById == statusListParams.CreatedByUserId);

            var maxIdFilter = new JsonFilterDefinition <Status>(
                "{ StatusId: { $lt: '" + statusListParams.MaxId + "' } }");

            var complexFilter = string.IsNullOrEmpty(statusListParams.MaxId)
                ? userFilter
                : userFilter & maxIdFilter;

            var options = new FindOptions <Status>
            {
                Sort  = Builders <Status> .Sort.Descending(x => x.StatusId),
                Limit = statusListParams.Count
            };

            var savedStatuses = await this.dbContext.Statuses.FindAsync(complexFilter, options);

            return(savedStatuses.ToEnumerable());
        }
Пример #25
0
        private static string InjectValueToQuery <TDto>(string query, string key, string value)
        {
            var filterDefinition = new JsonFilterDefinition <TDto>(query);
            var queryJObject     = JObject.Parse(filterDefinition.Json);

            if (queryJObject.ContainsKey("where"))
            {
                if (queryJObject["where"] is JObject whereClauseNode)
                {
                    if (whereClauseNode.ContainsKey(key))
                    {
                        whereClauseNode[key] = value;
                    }
                    else
                    {
                        whereClauseNode.Add(key, value);
                    }

                    return(queryJObject.ToString());
                }
            }
            else
            {
                if (queryJObject.ContainsKey(key))
                {
                    queryJObject[key] = value;
                }
                else
                {
                    queryJObject.Add(key, value);
                }

                return(queryJObject.ToString());
            }

            return(query);
        }
        //刷新周排行榜 1,周财富榜,2,周战绩榜
        public static async Task <List <Log_Rank> > QueryJsonRank(this DBProxyComponent self, int type)
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();
            FilterDefinition <Log_Rank> filterDefinition = new JsonFilterDefinition <Log_Rank>($"{{}}");

            FilterDefinition <Log_Rank> filterEmpty    = Builders <Log_Rank> .Filter.Empty;
            SortDefinition <Log_Rank>   sortDefinition = Builders <Log_Rank> .Sort.Descending("");

            IAsyncCursor <Log_Rank> asyncCursor = await dbComponent.GetDBDataCollection <Log_Rank>(typeof(Log_Rank).Name).FindAsync(filterDefinition);



            List <Log_Rank> components = new List <Log_Rank>();

            if (type == 1)
            {
                components = await dbComponent.GetDBDataCollection <Log_Rank>(typeof(Log_Rank).Name).Find(filterDefinition).SortByDescending(a => a.Wealth).Limit(50).ToListAsync();
            }
            else if (type == 2)
            {
                components = await dbComponent.GetDBDataCollection <Log_Rank>(typeof(Log_Rank).Name).Find(filterDefinition).SortByDescending(a => a.WinGameCount).Limit(50).ToListAsync();
            }
            return(components);
        }
Пример #27
0
        public override async Task Run()
        {
            DBComponent dbComponent = Game.Scene.GetComponent <DBComponent>();

            try
            {
                // 执行查询数据库任务
                //  FilterDefinition<ComponentWithId> filterDefinition = new JsonFilterDefinition<ComponentWithId>(this.QueryJson);
                //  IAsyncCursor<ComponentWithId> cursor = await dbComponent.GetCollection(this.CollectionName).FindAsync(filterDefinition);
                // List<ComponentWithId> components = await cursor.ToListAsync();
                //  this.Tcs.SetResult(components);

                FilterDefinition <ComponentWithId>             filterDefinition = new JsonFilterDefinition <ComponentWithId>(this.QueryJson);
                SortDefinition <ComponentWithId>               sortDefinition   = new JsonSortDefinition <ComponentWithId>(this.SortJson);
                IFindFluent <ComponentWithId, ComponentWithId> ifindiluent      = dbComponent.GetCollection(this.CollectionName).Find(filterDefinition).Sort(sortDefinition).Limit(this.Count);
                List <ComponentWithId> components = await ifindiluent.ToCursor().ToListAsync();

                this.Tcs.SetResult(components);
            }
            catch (Exception e)
            {
                this.Tcs.SetException(new Exception($"查询数据库异常! {CollectionName} {this.QueryJson}", e));
            }
        }
Пример #28
0
        public async Task <int> GetReportsAmountForUser(string user)
        {
            FilterDefinition <Report> reportFilter = new JsonFilterDefinition <Report>($"{{FirstUserName: \"{user}\"}}");

            return(await GetReportsAmount(reportFilter));
        }
Пример #29
0
        public async ValueTask <long> CountAsync(string query)
        {
            var filterDefinition = new JsonFilterDefinition <dynamic>(query);

            return(await this.Collection.CountDocumentsAsync(filterDefinition));
        }
Пример #30
0
        public long Count(string query)
        {
            var filterDefinition = new JsonFilterDefinition <dynamic>(query);

            return(this.Collection.CountDocuments(filterDefinition));
        }