예제 #1
0
        internal dynamic find(DbFunction dbFunction)
        {
            ConnectionManager.OpenConnection(dbFunction.Url, dbFunction.DatabaseName);
            var          collection = ConnectionManager.GetCollection(dbFunction.Collection);
            BsonDocument filter     = new BsonDocument();
            BsonDocument projection = new BsonDocument();

            if (dbFunction.Arguments.Count > 0 &&
                !dbFunction.Arguments[0].GetType().Name.Equals(DataType.BsonDocument))
            {
                HasError = true;
                return(new List <BsonDocument>()
                {
                    FindErrors.GetDontKnowHowToMessageObject()
                });
            }
            if (dbFunction.SuffixFunction == null)
            {
                switch (dbFunction.Arguments.Count)
                {
                case 0:
                {
                    return(collection.Find(filter).ToList());
                }

                case 1:
                {
                    filter = dbFunction.Arguments[0].ToBsonDocument();
                    return(collection.Find(filter).ToList());
                }

                case 2:
                {
                    if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                    {
                        filter     = dbFunction.Arguments[0].ToBsonDocument();
                        projection = dbFunction.Arguments[1].ToBsonDocument();
                    }
                    return(collection.Find(filter).Project(projection).ToList());
                }

                case 3:
                {
                    if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                    {
                        filter     = dbFunction.Arguments[0].ToBsonDocument();
                        projection = dbFunction.Arguments[1].ToBsonDocument();
                    }
                    int limit = dbFunction.Arguments[2].ToInt32();
                    return(collection.Find(filter).Project(projection).Limit(limit).ToList());
                }

                default:
                {
                    if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                    {
                        filter     = dbFunction.Arguments[0].ToBsonDocument();
                        projection = dbFunction.Arguments[1].ToBsonDocument();
                    }
                    int limit = dbFunction.Arguments[2].ToInt32();
                    int skip  = dbFunction.Arguments[3].ToInt32();
                    return(collection.Find(filter).Project(projection).Skip(skip).Limit(limit).ToList());
                }
                }
            }
            else
            {
                if (dbFunction.SuffixFunction.Name.Equals(SuffixFunctionNames.count) && dbFunction.SuffixFunction.SuffixFunction == null)
                {
                    return(collection.Find(filter).Count());
                }
                else
                {
                    HasError = true;
                    return(FindErrors.NotAFunction(dbFunction));
                }
            }
        }
예제 #2
0
        internal dynamic findOne(DbFunction dbFunction)
        {
            ConnectionManager.OpenConnection(dbFunction.Url, dbFunction.DatabaseName);
            var collection = ConnectionManager.GetCollection(dbFunction.Collection);
            BsonDocument filter = new BsonDocument();
            BsonDocument projection = new BsonDocument();

            if (dbFunction.Arguments.Count > 0
                && !dbFunction.Arguments[0].GetType().Name.Equals(DataType.BsonDocument))
            {
                HasError = true;
                return FindErrors.GetDontKnowHowToMessageObject();
            }
            if (dbFunction.SuffixFunction != null)
            {
                HasError = true;
                return FindErrors.NotAFunction(dbFunction);
            }
            switch (dbFunction.Arguments.Count)
            {
                case 0:
                    {

                        return collection.Find(filter).FirstOrDefault();
                    }

                case 1:
                    {

                        filter = dbFunction.Arguments[0].ToBsonDocument();
                        return collection.Find(filter).FirstOrDefault();
                    }
                case 2:
                    {
                        if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                        {
                            filter = dbFunction.Arguments[0].ToBsonDocument();
                            projection = dbFunction.Arguments[1].ToBsonDocument();

                        }
                        return collection.Find(filter).Limit(1).Project(projection).FirstOrDefault();
                    }
                default:
                    {
                        if (dbFunction.Arguments[3] is BsonString)
                        {
                            if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                            {
                                filter = dbFunction.Arguments[0].ToBsonDocument();
                                projection = dbFunction.Arguments[1].ToBsonDocument();

                            }
                            int limit = dbFunction.Arguments[2].ToInt32();
                            return collection.Find(filter).Limit(1).Project(projection).Limit(limit).FirstOrDefault();
                        }
                        HasError = true;
                        return FindErrors.GetArgumentDataTypeMissMatch();

                    }
            }
        }
예제 #3
0
        internal dynamic find(DbFunction dbFunction)
        {
            ConnectionManager.OpenConnection(dbFunction.Url, dbFunction.DatabaseName);
            var          collection = ConnectionManager.GetCollection(dbFunction.Collection);
            BsonDocument filter     = new BsonDocument();
            BsonDocument projection = new BsonDocument();

            if (dbFunction.Arguments.Count > 0 &&
                !dbFunction.Arguments[0].GetType().Name.Equals(DataType.BsonDocument))
            {
                HasError = true;
                return(new List <BsonDocument>()
                {
                    FindErrors.GetDontKnowHowToMessageObject()
                });
            }
            if (dbFunction.SuffixFunction == null)
            {
                switch (dbFunction.Arguments.Count)
                {
                case 0:
                {
                    HasError = true;
                    return(FindErrors.FindAndUpdateNoArgument());
                }

                case 1:
                {
                    filter = dbFunction.Arguments[0].ToBsonDocument();
                    BsonValue query  = filter["query"];
                    BsonValue update = filter["update"];
                    BsonValue upsert = filter["upsert"];
                    BsonValue sort   = filter["sort"];
                    //collection.FindOneAndUpdate(query, update, sort);
                    if (filter.Contains("update") || filter.Contains("remove"))
                    {
                        return(null);       // collection.FindOneAndUpdate(filter,update,options,cancellationToken);
                    }
                    else
                    {
                        return(FindErrors.FindAndUpdateNoArgument());
                    }
                }

                case 2:
                {
                    if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                    {
                        filter     = dbFunction.Arguments[0].ToBsonDocument();
                        projection = dbFunction.Arguments[1].ToBsonDocument();
                    }
                    return(collection.Find(filter).Project(projection).ToList());
                }

                case 3:
                {
                    if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                    {
                        filter     = dbFunction.Arguments[0].ToBsonDocument();
                        projection = dbFunction.Arguments[1].ToBsonDocument();
                    }
                    int limit = dbFunction.Arguments[2].ToInt32();
                    return(collection.Find(filter).Project(projection).Limit(limit).ToList());
                }

                default:
                {
                    if (dbFunction.Arguments[1].GetType().Name.Equals(DataType.BsonDocument))
                    {
                        filter     = dbFunction.Arguments[0].ToBsonDocument();
                        projection = dbFunction.Arguments[1].ToBsonDocument();
                    }
                    int limit = dbFunction.Arguments[2].ToInt32();
                    int skip  = dbFunction.Arguments[3].ToInt32();
                    //return collection.Find(filter).Project(projection).Skip(skip).Limit(limit).ToList();


                    var update = Builders <BsonDocument> .Update.Inc("UseCount", 1);

                    var sort = new FindOneAndUpdateOptions <BsonDocument>
                    {
                        Sort = Builders <BsonDocument> .Sort.Ascending("UseCount")
                    };
                    return(collection.FindOneAndUpdate(filter, update, sort));
                }
                }
            }
            else
            {
                if (dbFunction.SuffixFunction.Name.Equals(SuffixFunctionNames.count) && dbFunction.SuffixFunction.SuffixFunction == null)
                {
                    return(collection.Find(filter).Count());
                }
                else
                {
                    HasError = true;
                    return(FindErrors.NotAFunction(dbFunction));
                }
            }
        }