假设我有两个集合:一个主集合和一个包含 meta数据的集合。元数据包含我不想在主集合中包含的其他(易失性)数据。
接下来我想做的是将这些 meta数据与主集合合并。这是可能的,因为它们都使用相同的_id
。但是,我不希望所有元数据都在主文档中结束,我希望在名为meta
的字段中结束。如下所示:
// Main record
{
_id: 1234,
varA: "foo",
varB: "bar"
}
// Meta record
{
_id: 1234,
metaA: "cafe",
metaB: "babe"
}
合并应该以
// Merged record
{
_id: 1234,
varA: "foo",
varB: "bar",
meta:
{
metaA: "cafe",
metaB: "babe"
}
}
显然,我可以手动迭代所有文档并自己合并它们,但这很慢,我相信这可以通过使用聚合阶段来解决。
我已经试过$merge
的各种选择,都无济于事。如果有人有主意,请告诉我。
谢谢你!
1条答案
按热度按时间hwamh0ep1#
我已经试过
$merge
的各种选择,都无济于事。如果有人有主意,请告诉我。如果我对情况的理解正确的话,
$merge
阶段中并没有直接实现您的目标的内置选项,相反,这里的解决方案将是在$merge
本身之前,通过聚合中的前几个阶段来塑造数据。具体来说,您当前拥有的
meta
记录如下所示:为了直接使用
$merge
,您需要它看起来更像这样:这样的转换可以通过管道来实现,例如:
将它们放在一起并追加
$merge
(带有默认值),将根据需要对main
集合中的文档进行更改: