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()); }
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(); }
/// <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))); }
/// <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); } } } } }