如何仅查找mongo中的特定字段

fee*_*lay 4 database lookup mongodb

如何只加入特定领域?使用$ lookup时,mongo返回整个文档.

让我们说这是我的数据:

用户

[
    { id: 0, name: "Bob", adj: 1 },
    { id: 1, name: "Will", adj: 2 },
]
Run Code Online (Sandbox Code Playgroud)

形容词

[
    { id: 1, name: "awesome" },
    { id: 2, name: "cool" },
]
Run Code Online (Sandbox Code Playgroud)

我想做一个查找,所以响应应该是这样的:

[
    { id: 0, name: "Bob", adj: 1, adj_value: "awesome" },
    { id: 1, name: "Will", adj: 2, adj_value: "cool" },
]
Run Code Online (Sandbox Code Playgroud)

这是我的尝试

db.collection('users').aggregate([
    {
        $lookup: {
            from: 'adjectives',
            localField: 'adj',
            foreignField: 'name',
            as: 'adjective_value'
         },
     },
 ])
Run Code Online (Sandbox Code Playgroud)

但它将整个文档插入到用户文档中.如何只获得单个字段的响应?

小智 9

$project管道中,您可以从查找集合对象中获取单个字段.

db.collection('users').aggregate([
    {
        $lookup: {
            from: 'adjectives',
            localField: 'adj',
            foreignField: 'id',
            as: 'adjective_value'
         },
     },
    {$unwind:'$adjective_value'},
    {$project:{
         adjective_value:'$adjective_value.name',
         id: 1, 
         name: 1, 
         adj: 1
    }}
 ])
Run Code Online (Sandbox Code Playgroud)