【发布时间】:2020-02-20 09:38:20
【问题描述】:
我正在尝试使用 $lookup 来聚合来自 2 个集合的数据
当有localField 值不在外部字段中时,聚合结果仍然包含localField 值,并且应该与之匹配的数据为空。但是当有一个foreignField值不在localField中时,该行数据不在最终结果中。
就我而言,本地和外部字段是它们各自的键。 这里有一些图片来说明我的意思。
保存在 2 个集合中的值(已作为 JSON 传递到 mongoDB):picture of excel files
集合一个例子:
/* 1 */
{
"_id" : ObjectId("5dad17507c3ad142d46d212f"),
"joina_key" : "key",
"joina_value1" : "value 1",
"joina_value2" : "value 2",
"__v" : 0
}
/* 2 */
{
"_id" : ObjectId("5dad17507c3ad142d46d2133"),
"joina_key" : "D1",
"joina_value1" : "4",
"joina_value2" : "8",
"__v" : 0
}
/* 3 */
{
"_id" : ObjectId("5dad17507c3ad142d46d2131"),
"joina_key" : "B1",
"joina_value1" : "2",
"joina_value2" : "4",
"__v" : 0
}
/* 4 */
{
"_id" : ObjectId("5dad17507c3ad142d46d2132"),
"joina_key" : "C1",
"joina_value1" : "3",
"joina_value2" : "6",
"__v" : 0
}
/* 5 */
{
"_id" : ObjectId("5dad17507c3ad142d46d2130"),
"joina_key" : "A1",
"joina_value1" : "1",
"joina_value2" : "2",
"__v" : 0
}
集合 B 示例:
/* 1 */
{
"_id" : ObjectId("5dad17d532987d08a8e3e009"),
"joinb_key" : "key",
"joinb_mult1" : "multiple 1",
"joinb_mult2" : "multiple 2",
"__v" : 0
}
/* 2 */
{
"_id" : ObjectId("5dad17d532987d08a8e3e00a"),
"joinb_key" : "A1",
"joinb_mult1" : "10",
"joinb_mult2" : "20",
"__v" : 0
}
/* 3 */
{
"_id" : ObjectId("5dad17d532987d08a8e3e00b"),
"joinb_key" : "B1",
"joinb_mult1" : "10",
"joinb_mult2" : "20",
"__v" : 0
}
/* 4 */
{
"_id" : ObjectId("5dad17d532987d08a8e3e00c"),
"joinb_key" : "C1",
"joinb_mult1" : "10",
"joinb_mult2" : "20",
"__v" : 0
}
/* 5 */
{
"_id" : ObjectId("5dad17d532987d08a8e3e00d"),
"joinb_key" : "D2",
"joinb_mult1" : "10",
"joinb_mult2" : "20",
"__v" : 0
}
我拥有的输出和我想要实现的输出:picture of outputs
我想知道是否有人知道如何实现这一点。
我对此很陌生,如果我遗漏了什么,请告诉我。提前致谢。
【问题讨论】: