【发布时间】:2023-03-19 14:33:01
【问题描述】:
尝试使用 C#/Linq 甚至原始 Mongodb 查询本身了解如何将多个数组作为笛卡尔积连接。
例如,我有一个集合,我过滤到以下两个文档:
[
{"movie":"starwars","showday":"monday"},
{"movie":"batman","showday":"thursday"},
{"movie":"sleepless","showday":"tuesday"}
]
[
{"actor":"angelina","location":"new york"},
{"actor":"jamie","location":"california"},
{"actor":"mcavoy","location":"arizona"}
]
如何加入每个数组中的每个项目以产生以下类型的结果?
[{"movie":"starwars","showday":"monday","actor":"angelina","location":"new york"},
{"movie":"batman","showday":"thursday","actor":"angelina","location":"new york"},
{"movie":"sleepless","showday":"tuesday","actor":"angelina","location":"new york"},
{"movie":"starwars","showday":"monday","actor":"jamie","location":"california"},
{"movie":"batman","showday":"thursday","actor":"jamie","location":"california"},
{"movie":"sleepless","showday":"tuesday","actor":"jamie","location":"california"},
{"movie":"starwars","showday":"monday","actor":"mcavoy","location":"arizona"},
{"movie":"batman","showday":"thursday","actor":"mcavoy","location":"arizona"},
{"movie":"sleepless","showday":"tuesday","actor":"mcavoy","location":"arizona"}]
我正在寻找一种可以处理任意数量文档的解决方案。因此,例如,如果在本例中,第 3 个文档也有 3 个对象数组,这些对象数组将在数组中生成一个包含 27 个项目的结果集 - 或者说是 27 行。
希望找到如何使用 C#(Linq?)Mongodb 驱动程序来查询和返回这样的数据的解决方案,但即使是特定于 mongodb 的查询也将开放,因为我希望可以从那里反转逻辑。谢谢
【问题讨论】:
-
是你的两个独立的集合还是你想迭代一个集合。你能解释更多你想要什么以及你尝试了什么
-
我其实有个问题,为什么你的模型是
{[movies],[actors]}而不是Movie{ movie, showday, [Actors] }请原谅我是题外话 -
由于数据中根本没有关系,所以“数据库”本身无法做到这一点。 MongoDB 不像 RDBMS,它可以从多个来源任意提取数据并在其上运行功能输出。事实上,除了
$lookup等之外,所有操作实际上一次只针对一个集合,但这些操作员需要一个相关的密钥。您可以在代码中执行此操作,或使用.eval()在服务器上运行代码。但是不要使用eval()。所以这是一个编码练习,而不是一个数据库解决方案。