FDC MongoDB 패치(컬럼추가)

This commit is contained in:
2025-03-06 09:40:18 +09:00
parent 0b7f4ba366
commit 0790ae42f9
3 changed files with 99 additions and 36 deletions

View File

@@ -28,38 +28,71 @@ namespace JWH.MONGODB
return item;
}
public static List<TraceCollection> GetCollectionData(string collectionName, DateTime dtStart, DateTime dtEnd, TraceCollection condition = null)
public static async void GetCollectionColumns(string collectionName)
{
MongoClient client = new MongoClient(ConnectionString);
IMongoDatabase database = client.GetDatabase(DatabaseName);
IMongoCollection<TraceCollection> collection = database.GetCollection<TraceCollection>(collectionName);
var collection = database.GetCollection<BsonDocument>(collectionName);
// # ALL Data
//var lst = collection.Find(_ => true).ToList();
// # Use BsonDocument
//var filter = new BsonDocument("LotID", "13089570006B");
// # Use Builders.Filter
//var filterBuilder = Builders<TraceCollection>.Filter;
//var filter = filterBuilder.Eq(x => x.LotID, "13109360026B");
var pipeline = new[]
{
new BsonDocument("$project", new BsonDocument("fields", new BsonDocument("$objectToArray", "$$ROOT"))),
new BsonDocument("$unwind", "$fields"),
new BsonDocument("$group", new BsonDocument("_id", BsonNull.Value).Add("uniqueFields", new BsonDocument("$addToSet", "$fields.k")))
};
FilterDefinitionBuilder<TraceCollection> filterBuilder = Builders<TraceCollection>.Filter;
FilterDefinition<TraceCollection> filter = filterBuilder.Gte(x => x.EVENTTIME, dtStart) & filterBuilder.Lt(x => x.EVENTTIME, dtEnd);
if (condition != null)
var result = await collection.Aggregate<BsonDocument>(pipeline).FirstOrDefaultAsync();
if (result != null && result.Contains("uniqueFields"))
{
string[] SkipPropertys = new string[] { "_id", "EVENTTIME" };
foreach (PropertyInfo property in condition.GetType().GetProperties())
var fields = result["uniqueFields"].AsBsonArray.Select(f => f.AsString);
Console.WriteLine("컬렉션의 필드 목록:");
foreach (var field in fields)
{
object value = property.GetValue(condition);
if (value != null)
{
if (property.Name.Equals("LotID")) filter &= filterBuilder.Eq(x => x.LotID, value);
continue;
}
Console.WriteLine(field);
}
}
List<TraceCollection> document = collection.Find(filter).ToList();
}
return document;
public static List<TraceCollection> GetCollectionData(string collectionName, DateTime dtStart, DateTime dtEnd, TraceCollection condition = null)
{
try
{
MongoClient client = new MongoClient(ConnectionString);
IMongoDatabase database = client.GetDatabase(DatabaseName);
IMongoCollection<TraceCollection> collection = database.GetCollection<TraceCollection>(collectionName);
// # ALL Data
//var lst = collection.Find(_ => true).ToList();
// # Use BsonDocument
//var filter = new BsonDocument("LotID", "13089570006B");
// # Use Builders.Filter
//var filterBuilder = Builders<TraceCollection>.Filter;
//var filter = filterBuilder.Eq(x => x.LotID, "13109360026B");
FilterDefinitionBuilder<TraceCollection> filterBuilder = Builders<TraceCollection>.Filter;
FilterDefinition<TraceCollection> filter = filterBuilder.Gte(x => x.EVENTTIME, dtStart) & filterBuilder.Lt(x => x.EVENTTIME, dtEnd);
if (condition != null)
{
string[] SkipPropertys = new string[] { "_id", "EVENTTIME" };
foreach (PropertyInfo property in condition.GetType().GetProperties())
{
object value = property.GetValue(condition);
if (value != null)
{
if (property.Name.Equals("LotID")) filter &= filterBuilder.Eq(x => x.LotID, value);
continue;
}
}
}
List<TraceCollection> document = collection.Find(filter).ToList();
return document;
}
catch (Exception ex)
{
throw ex;
}
}
public static bool GetCollectionSize_Flag = false;
@@ -150,35 +183,52 @@ namespace JWH.MONGODB
public ObjectId _id { get; set; }
public List<object> LotList { get; set; }
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime EVENTTIME { get; set; }
public string ProcessID { get; set; }
public string UnitState { get; set; }
public string VIDName { get; set; }
public object Value { get; set; }
public string LotID { get; set; }
public string Sign { get; set; }
public string MaterialID { get; set; }
public List<object> LotList { get; set; }
public string LotID { get; set; }
public string ProductID { get; set; }
public object UnitNO { get; set; }
public string Recipe { get; set; }
public string ProcessID { get; set; }
public object UnitNO { get; set; }
public string VORNR { get; set; }
public string UnitState { get; set; }
public string MaterialID { get; set; }
public string Sign { get; set; }
public string CarrierId { get; set; }
public string PanelId { get; set; }
public string Position { get; set; }
public string MarkingId { get; set; }
public string Step { get; set; }
public double LowerSV { get; set; }
public double UpperSV { get; set; }
public string MongGoUnitName { get; set; }
}
}
}