C# 如何为MongoDB定义类型
对于像我这样做了大量SQL的人来说,C#项目让一家面包连锁店记录每个制作,包括配料和实际配方等,似乎有点太自由了。我想起了MongoDB。 从典型类型、数据库接口和存储库类开始,我意识到我已经习惯于将所有内容映射到一个类型类中,以定义每个属性/列。我选择MongoDB的原因是它无法确定到底有多少列。有时他们按照一定的顺序写东西,有时他们只是随意地写。不可能在类型中预先定义它们。当然,解决方法是组成20个属性/列,因为它们永远不会使用这么多。我知道MongoDB也有模式。但是,这种方式可以简单地回到通常的固定模式SQL 如果MongoDB仍然是数据库选择,C#可能有以下类型选项:C# 如何为MongoDB定义类型,c#,mongodb,C#,Mongodb,对于像我这样做了大量SQL的人来说,C#项目让一家面包连锁店记录每个制作,包括配料和实际配方等,似乎有点太自由了。我想起了MongoDB。 从典型类型、数据库接口和存储库类开始,我意识到我已经习惯于将所有内容映射到一个类型类中,以定义每个属性/列。我选择MongoDB的原因是它无法确定到底有多少列。有时他们按照一定的顺序写东西,有时他们只是随意地写。不可能在类型中预先定义它们。当然,解决方法是组成20个属性/列,因为它们永远不会使用这么多。我知道MongoDB也有模式。但是,这种方式可以简单地回
面包店{
int UserId,
字符串用户名,
Datetime makeTime,
我的收集使,
i收集配方
}
公开课制作
{
字符串字段名,
字符串实际值
}
公共课食谱
{
字符串ingredientName,
串剂量
}
面包店{
int UserId,
字符串用户名,
Datetime makeTime,
我的收集使,
i收集配方
}
公开课制作
{
字符串字段名1,字符串实际值1,
...
字符串字段名20,字符串实际值20
}
公共课食谱
{
字符串INGREDIENTNAME 1,字符串dose1,
...
字符串IngRadientName20,字符串dose20
}
必须能够查询项目和值(如果存在)。需要一些专家建议。谢谢。您只需将您的
制作成字典
和收据
请举个例子。据我所知,mongoDb的东西您使用的是第三部分,而不是使用fieldname1-fieldname20,只需使用另一个列表即可。因为它的保存方式非常类似于JSON对象,所以您不必绑定到行和列模式中的二维对象。如果您的类make由一个列表组成,其中每个字段都由字段和值成员组成,那么您可以灵活地将大量字段存储到数据库中。@Sebi很好。关键是要使它垂直而不是水平。我如何处理相关但非成对的事情?例如,配方、剂量和温度。我认为它完全是面向对象的。建立一个好的C#对象结构。稍后将其序列化到mongodb。但这只是我的观点,我从未尝试过。要保持关系,我认为您需要存储Mongo文档的Id字段@他们如此习惯于自由形式,人类从上下文中获得它,从不感到困惑,因为他们与众不同,数字的范围从不重叠。例如,他们写道:品牌A,糖,2(意味着勺子),300(意味着温度),20(意味着分钟)。这是一篇2013年的帖子。您知道现在是否支持列表吗?原因是它们如此习惯于自由形式,人类从上下文中获得它,永远不会感到困惑,因为它们是独特的,数字的范围永远不会重叠。例如,他们写道:品牌A,糖,2(意味着勺子),300(意味着温度),20(意味着分钟)。你可以看出他们没有钥匙。因为“糖”已经是整个文档的关键。在“sugar”之后要求字段的单位/剂量/标签会增加数据输入的开销。即使是2013年发布的,也不会使其错误或无效。支持列表。您可以始终将属性设置为字符串列表以实现此目的。将ExtraElements成员的Get类型更改为list from Dictionary时,必须为BsonDocument或Implemente IDictionary。如果您使用的是list,则不应使用BsonExtraElements批注。把它拿走。混合动力车怎么样?这是一个字典
,然后将对象填充为列表
或数组[]
,以保持顺序。
Bakery{
int UserId,
string UserName,
Datetime makeTime,
string make,
string recipe
}
Bakery{
int UserId,
string UserName,
Datetime makeTime,
iCollection<make> makes,
iCollection<recipe> recipes
}
public class make
{
string fieldName,
string actualValue
}
public class recipe
{
string ingredientName,
string dose
}
Bakery{
int UserId,
string UserName,
Datetime makeTime,
iCollection<make> makes,
iCollection<recipe> recipes
}
public class make
{
string fieldName1, string actualValue1,
...
string fieldName20, string actualValue20
}
public class recipe
{
string ingredientName1, string dose1,
...
string ingredientName20, string dose20
}