Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加入Mongo DB?_C#_Sql_Node.js_Mongodb_Nosql - Fatal编程技术网

C# 加入Mongo DB?

C# 加入Mongo DB?,c#,sql,node.js,mongodb,nosql,C#,Sql,Node.js,Mongodb,Nosql,对于酒店预订网站,在SQL中-假设我有两个表 预订 BookingId 起始日期 结束日期 成本 霍特利德酒店(fk) 当你询问预订时,你应该考虑从酒店集合中需要哪些信息。 在SQL中,通常的做法是规范化数据,例如酒店名称,以便只存储一次,然后在相关表中存储引用ID,并使用联接检索该数据,例如在查找预订时 在NoSQL中,一种常见的做法是对数据进行部分反规范化,以最小化查询数量 例如,当您查询预订时,您真的需要每次预订和每个酒店的所有详细信息吗?或者,您是否只需要足够的信息来显示列表/概述,并仅

对于酒店预订网站,在SQL中-假设我有两个表

预订 BookingId 起始日期 结束日期 成本 霍特利德酒店(fk)
当你询问预订时,你应该考虑从酒店集合中需要哪些信息。 在SQL中,通常的做法是规范化数据,例如酒店名称,以便只存储一次,然后在相关表中存储引用ID,并使用联接检索该数据,例如在查找预订时

在NoSQL中,一种常见的做法是对数据进行部分反规范化,以最小化查询数量

例如,当您查询预订时,您真的需要每次预订和每个酒店的所有详细信息吗?或者,您是否只需要足够的信息来显示列表/概述,并仅在用户单击预订时检索其他详细信息

如果您确实需要立即获取所有数据,则需要在以下两个方面进行选择:

  • 将酒店的id存储在预订中。查询时,请使用$lookup检索酒店数据
  • 将所有酒店数据嵌入预订列表中。当任何酒店数据发生更改时,也会更新所有未结预订
如果初始查询中的部分数据可以接受,请在预订中存储_id和最少的酒店详细信息,如姓名和位置。查询预订列表/概览时,酒店名称和位置已存在,无需加入或单独查询

然后,用户可以在后台查看列表时检索每个酒店的剩余数据,也可以在用户选择预订时按需检索

这种混合方法需要在酒店名称或位置发生变化时更新所有预订(希望是罕见的事件),同时允许更快地检索初始显示所需的数据。如果不是每次预订都要求提供详细信息,这也会减少数据传输


对于特定情况,哪种方法最适合将在很大程度上取决于界面设计。

您可以在mongodb中使用
聚合
查找

db.bookings.aggregate([{
$lookup:{
来自:“酒店”,
localField:“HotelId”,
外域:“HotelId”,
as:“酒店”
}
}])

这将为您提供嵌套在预订记录中的
hotel
对象。

我会将它们分成两个单独的集合,因为每个酒店的预订数量可能会无限增长。如果出现这种情况,您将超过mongo中的16mb bsondocument限制。