コード例 #1
0
        public IQueryable <T> FindDeleted()
        {
            MongoCursor <AuditObject> allAuditObjs = Repositories.Instance.Repository <AuditObject>(_mongoConfig).FindAll();

            string colName = MongoUtil.GetCollectioNameFromInterface <T>();

            var asAuditObjs = allAuditObjs.Where(x => x.Source == colName && x.Action == "DEL").ToList();

            return(asAuditObjs.Select(item => item.Item).Select(doc => (T)BsonSerializer.Deserialize((BsonDocument)doc, typeof(T))).ToList().AsQueryable());
        }
コード例 #2
0
        public void TestCursors()
        {
            this.DbClient = new MongoClient(connectionString);
            this.DbServer = this.DbClient.GetServer();
            this.Database = this.DbServer.GetDatabase("test_client");
            Collection2   = Database.GetCollection <DBObject>("cursors_sample");

            MongoCursor <DBObject> cursor = Collection2.FindAll();

            //Console.WriteLine("cursor count = {0}", cursor.Count());

            cursor.SetSkip(0);

            var lst = cursor.Take(10).ToList();

            foreach (var l in lst)
            {
                Console.Write(l.data + ", ");
            }
            Console.WriteLine();

            cursor = Collection2.FindAll();
            cursor.SetSkip(10);
            lst = cursor.Take(10).ToList();
            foreach (var l in lst)
            {
                Console.Write(l.data + ", ");
            }
            Console.WriteLine();

            cursor = Collection2.FindAll();
            cursor.SetSkip(0);
            lst = cursor.Take(10).ToList();
            foreach (var l in lst)
            {
                Console.Write(l.data + ", ");
            }
            Console.WriteLine();

            Console.WriteLine("cursor count = {0}", cursor.Count());

            cursor = Collection2.FindAll();
            Filter filter   = new Filter();
            var    filtered = cursor.Where(obj => filter.Check(obj.data)).Skip(10).Take(10).ToList();

            Console.WriteLine("filtered count: " + filtered.Count);
            foreach (var o in filtered)
            {
                Console.Write(o.data + ", ");
            }
            Console.WriteLine();
        }
コード例 #3
0
        /// <summary>
        /// 将项目节点导出至模板
        /// </summary>
        /// <param name="curNodeId"></param>
        /// <param name="typeObjIds"></param>
        /// <returns></returns>
        public ActionResult ProjNodeExportTemplate(int pid, string typeObjIds)
        {
            string tbName = "ProjectNode";

            BsonDocument pidNode = dataOp.FindOneByKeyVal(tbName, "nodeId", pid.ToString());

            #region 获取所有节点
            List <BsonDocument> allNodeList = new List <BsonDocument>();

            List <int> typeObjIdList = typeObjIds.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(t => int.Parse(t)).ToList(); //模板中的类型列表

            MongoCursor <BsonDocument> query = null;

            if (pid > 0)
            {
                query = dataOp.FindChildNodes(tbName, pid.ToString());
            }
            else
            {
                query = dataOp.FindAll(tbName);
            }

            if (typeObjIdList.Count > 0)
            {
                allNodeList = query.Where(t => typeObjIdList.Contains(t.Int("typeObjId"))).ToList();
            }
            else
            {
                allNodeList = query.ToList();
            }
            #endregion

            #region 获取所有节点对应的模板BSON
            StringBuilder saveContent = new StringBuilder();

            Dictionary <int, int> corDic = new Dictionary <int, int>();

            int           index        = 0;
            List <string> noNeedColumn = new List <string>()
            {
                "_id", "nodeId", "nodePid", "nodeLevel", "nodeOrder", "nodeKey", "createDate", "updateDate", "createUserId", "updateUserId", "underTable"
            };

            foreach (var tempNode in allNodeList.OrderBy(t => t.String("nodeKey")))
            {
                index++;
                corDic.Add(tempNode.Int("nodeId"), index);

                BsonDocument tempBson = new BsonDocument();

                tempBson.Add("id", index);

                if (corDic.ContainsKey(tempNode.Int("nodePid")))
                {
                    tempBson.Add("pid", corDic[tempNode.Int("nodePid")].ToString());
                }
                else if (tempNode.Int("nodePid") == pid)
                {
                    tempBson.Add("pid", "0");
                }
                else
                {
                    continue;
                }

                foreach (var tempElement in tempNode.Elements)
                {
                    if (noNeedColumn.Contains(tempElement.Name))
                    {
                        continue;
                    }

                    tempBson.Add(tempElement.Name, tempElement.Value);
                }

                saveContent.Append(tempBson.ToString());
            }
            #endregion

            #region 保存至模板库
            BsonDocument template = new BsonDocument();

            template.Add("sourceId", pid.ToString());
            template.Add("sourctType", typeObjIds);
            template.Add("name", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + pidNode.String("name") + "项目的成果目录模板");
            template.Add("content", saveContent.ToString());

            InvokeResult result = dataOp.Insert("ProjNodeTemplate", template);
            #endregion

            return(Json(TypeConvert.InvokeResultToPageJson(result)));
        }
コード例 #4
0
        /// <summary>
        /// Recursive method that removes id from the list of departments if all of its children are present in the list and their children don't have children ...
        /// </summary>
        /// <param name="departments">The list of all department ids</param>
        /// <param name="cursor">Mongo Cursor, providing acces to the list of all departments</param>
        /// <param name="parents"></param>
        private static void RemoveIfAllChildrenArePresentOrThereAreNoChildren(List<ObjectId> departments, MongoCursor<Department> cursor, List<ObjectId> parents)
        {
            var localParents = new List<ObjectId>(parents);
            foreach (var dep in localParents)
            {
                ObjectId pId = dep;
                //Get all children
                var children = cursor.Where(o => o.DepartmentOf == pId).Select(o => o.Id).Distinct().ToList();
                //If no children, remove department
                if (children.Count() == 0)
                {
                    parents.Remove(dep);
                }
                else
                {
                    //Validate whether all children are present in the departments
                    if (children.Except(departments).Count() == 0)
                    {
                        //Validate if their children have children
                        RemoveIfAllChildrenArePresentOrThereAreNoChildren(departments, cursor, children);

                        //If no children, remove department
                        if (children.Count() == 0)
                        {
                            parents.Remove(dep);
                        }
                    }
                }
            }
        }