C# 从MongoDB中提取特定记录,其中记录使用C中的对象GUID#
我使用的一个Mongo对象(这里称为“Admin”)使用GUID作为主键,并有一个包含datevalue的“DailyActivities”列表和另一个名为“Subactivities”的列表。管理对象如下所示。我正在努力寻找C#中的资源,这些资源将有助于提取仅与特定日期对应的日常活动,其中的子活动具有“功耗”类别C# 从MongoDB中提取特定记录,其中记录使用C中的对象GUID#,c#,mongodb,mongodb-query,C#,Mongodb,Mongodb Query,我使用的一个Mongo对象(这里称为“Admin”)使用GUID作为主键,并有一个包含datevalue的“DailyActivities”列表和另一个名为“Subactivities”的列表。管理对象如下所示。我正在努力寻找C#中的资源,这些资源将有助于提取仅与特定日期对应的日常活动,其中的子活动具有“功耗”类别 { "_id" : ObjectId("5a2b7b887df7ce464404dc7d"), "DailyActivities" : [ {
{
"_id" : ObjectId("5a2b7b887df7ce464404dc7d"),
"DailyActivities" : [
{
"datetime" : ISODate("2017-12-09T16:29:00.916Z"),
"Subactivities" : [
{
"entryDate" : ISODate("2017-12-09T06:30:26.658Z"),
"category" : "Power Consumption"
},
{
"entryDate" : ISODate("2017-12-09T06:30:26.658Z"),
"category" : "Machinery"
}
]
},
{
"datetime" : ISODate("2017-12-13T00:00:00.916Z"),
"Subactivities" : [
{
"entryDate" : ISODate("2017-12-13T06:30:26.658Z"),
"category" : "Lamination"
}
]
}
]
}
我希望得到的结果应该是:
{
"_id" : ObjectId("5c7044f07ef75175b2b8efd6"),
"entryDate" : ISODate("2017-12-09T06:30:26.658Z"),
"category" : "Power Consumption"
}
现在,我没有时间完成这个练习,但这里有一些东西可以让你继续。我将在下周对其进行编辑和改进(例如,将其转换为一些c语言,其中许多c语言是不可能使用类型化方法的)
db.collection.aggregate([{
$project: {
"DailyActivities": {
$filter: {
input: "$DailyActivities",
cond: {
$eq: [ "$$this.datetime", ISODate("2017-12-09T16:29:00.916Z") ]
}
}
}
}
}, {
$unwind: "$DailyActivities"
}, {
$unwind: "$DailyActivities.Subactivities"
}, {
$replaceRoot: {
"newRoot": "$DailyActivities.Subactivities"
}
}, {
$match: {
"category": "Power Consumption"
}
}])
现在,我没有时间完成这个练习,但这里有一些东西可以让你继续。我将在下周对其进行编辑和改进(例如,将其转换为一些c语言,其中许多c语言是不可能使用类型化方法的)
db.collection.aggregate([{
$project: {
"DailyActivities": {
$filter: {
input: "$DailyActivities",
cond: {
$eq: [ "$$this.datetime", ISODate("2017-12-09T16:29:00.916Z") ]
}
}
}
}
}, {
$unwind: "$DailyActivities"
}, {
$unwind: "$DailyActivities.Subactivities"
}, {
$replaceRoot: {
"newRoot": "$DailyActivities.Subactivities"
}
}, {
$match: {
"category": "Power Consumption"
}
}])
让我为您提供一个使用MongoDAL作为数据访问层的解决方案。它是c#驱动程序的包装器,因此您可以获得驱动程序的所有功能以及一个高度类型化的api
using System;
using System.Linq;
using MongoDAL;
namespace AdminActs
{
class Admin : Entity
{
public DailyActivity[] DailyActivities { get; set; }
}
class DailyActivity
{
public DateTime Time { get; set; }
public SubActivity[] SubActivities { get; set; }
}
class SubActivity
{
public DateTime EntryDate { get; set; }
public string Category { get; set; }
}
class Program
{
static void Main(string[] args)
{
new DB("activities");
var now = DateTime.Now;
var admin = new Admin
{
DailyActivities = new DailyActivity[]
{
new DailyActivity{
Time = now,
SubActivities = new SubActivity[]
{
new SubActivity{
Category ="Power Consumption",
EntryDate = DateTime.Now}
}
}
}
};
admin.Save();
var subActivities = admin.Collection()
.SelectMany(a => a.DailyActivities)
.Where(da => da.Time == now)
.SelectMany(da => da.SubActivities)
.Where(sa => sa.Category == "Power Consumption");
var res = subActivities.ToArray();
Console.ReadKey();
}
}
}
让我为您提供一个使用MongoDAL作为数据访问层的解决方案。它是c#驱动程序的包装器,因此您可以获得驱动程序的所有功能以及一个高度类型化的api
using System;
using System.Linq;
using MongoDAL;
namespace AdminActs
{
class Admin : Entity
{
public DailyActivity[] DailyActivities { get; set; }
}
class DailyActivity
{
public DateTime Time { get; set; }
public SubActivity[] SubActivities { get; set; }
}
class SubActivity
{
public DateTime EntryDate { get; set; }
public string Category { get; set; }
}
class Program
{
static void Main(string[] args)
{
new DB("activities");
var now = DateTime.Now;
var admin = new Admin
{
DailyActivities = new DailyActivity[]
{
new DailyActivity{
Time = now,
SubActivities = new SubActivity[]
{
new SubActivity{
Category ="Power Consumption",
EntryDate = DateTime.Now}
}
}
}
};
admin.Save();
var subActivities = admin.Collection()
.SelectMany(a => a.DailyActivities)
.Where(da => da.Time == now)
.SelectMany(da => da.SubActivities)
.Where(sa => sa.Category == "Power Consumption");
var res = subActivities.ToArray();
Console.ReadKey();
}
}
}
您想要的输出文档是什么样子?@dnickless只需要如下子活动对象,而不需要父对象。所以,简单地说,{“entryDate”:ISODate(“2017-12-09T06:30:26.658Z”),“category”:“功耗”}您想要的输出文档是什么样子?@dnickless只需要如下子活动对象,而不需要父对象。所以,简单地说,{“entryDate”:ISODate(“2017-12-09T06:30:26.658Z”),“category”:“功耗”}上面的内容非常有用,我可以转换成C代码,非常感谢@dnickless上面的内容非常有用,我可以转换成C代码,非常感谢@dnickless