如何将集合的字段与另一个集合的数组内的字段匹配

时间:2020-06-11 13:43:19

标签: mongodb mongoose mongodb-query aggregation-framework

我在MongoDb中有2个收藏集,然后说:

Collection1

[ {"Name" : "foo1", "Place" : "bar1", "Rank" : 1},
  {"Name" : "foo2", "Place" : "bar2", "Rank" : 2},
  {"Name" : "foo3", "Place" : "bar3", "Rank" : 3} ]

Collection2

[ {"DocNo" : "One",
   "DocArray" : [{"Name" : "ABC", "Number" : 1},
                 {"Name" : "DEF", "Number" : 2},
                 {"Name" : "XYZ", "Number" : 4}]},
  {"DocNo" : "Two",
   "DocArray" : [{"Name" : "JKL", "Number" : 5},
                 {"Name" : "GHI", "Number" : 1},
                 {"Name" : "UVW", "Number" : 3}]}
]

我需要在 Collection1 中写一个查询,其中我有DocNO才能从 Collection2 中进行搜索,并且仅返回 Collection1中的那些文档,其中Rank字段与该特定文档Number内所有元素的所有DocArray字段匹配。

在此示例中,如果我有DocNo = "Two",则返回的数组将如下所示:

[ {"Name" : "foo1", "Place" : "bar1", "Rank" : 1},
  {"Name" : "foo3", "Place" : "bar3", "Rank" : 3}]

我需要在单个mongo查询中完成所有这些操作

1 个答案:

答案 0 :(得分:0)

您的要求:

我需要在Collection1中写一个查询

但是我要说的是,您需要在IQR = stats.iqr(data, interpolation = 'midpoint') 上开始此聚合,并在Collection 2上使用$lookup阶段

查询:

Collection 1

测试: mongoplayground