仅添加来自 MongoDB 中另一个集合的字段

Pra*_*l M 6 aggregate mongoose mongodb mongodb-query

我有两个收藏

带架构

{
    a : Array,
    b : ObjectID
}
Run Code Online (Sandbox Code Playgroud)

和 B 具有以下架构

{
    x : 'string',
    y : // some object schema
    ...
    b : ObjectID
}
Run Code Online (Sandbox Code Playgroud)

我想使用 mongo 聚合在集合 B 中添加一个新字段,以仅包含使用 b 搜索的集合 A 中的 a。

我希望聚合后的值具有以下架构:

{
    x : 'string',
    newField : a // array from collection A
    y : // some object schema
    ...
    b : ObjectID
}
Run Code Online (Sandbox Code Playgroud)

只有 $lookup 不起作用,因为我不想要整个对象,并且合并将删除 _id 并合并我不想要的其他对象。

Pra*_*l M 14

解决后我自己回答这个问题。

这可以作为操作管道来完成,如下所示:

{
    $lookup: {
        from: "A",
        localField: "b",
        foreignField: "b",
        as: "someField"
    }
},
{
    $addFields: {
      newField  : "$someField.a"
    }
},
{
    $unwind: "$newField"
},
{
    $project: {
        someField: 0
    }
}
Run Code Online (Sandbox Code Playgroud)

更有效的答案将被接受