MongoDB多字段查找

安德森·皮门特尔(Anderson Pimentel)

我正在尝试$lookup在MongoDB 3.6上使用两个字段来执行我已经在这里阅读了文档和类似的问题,但是我找不到问题所在。

集合acls

[ { _id: 1, FolderId: 4, Sid: 'S-123-456' }
  { _id: 2, FolderId: 5, Sid: 'S-234-567' }
  { _id: 3, FolderId: 6, Sid: 'S-345-678' } ]

集合groups

[ { _id: 1, ProcessId: 10, Sid: 'S-123-456', Users: [ 'user1', 'user2'] }
  { _id: 2, ProcessId: 10, Sid: 'S-234-567', Users: [ 'user1'] }
  { _id: 3, ProcessId: 20, Sid: 'S-123-456', Users: [ 'user2'] } ]

查询:

db.acls.aggregate({
    $lookup: 
    { 
        from: 'groups',
        let: { 'ProcessId': 10, 'GroupSid': '$Sid' },
        pipeline: [{
                   $match: {
                      $expr: {
                         $and: [
                            {
                               $eq: [ '$ProcessId', '$$ProcessId' ]
                            },
                            {
                               $eq: [ '$Sid', '$$GroupSid' ]
                            }
                         ]
                      }
                   }
                }],
        as: 'grouplist'
    }
})

我期望返回类似以下内容:

{ _id: 1, FolderId: 4, Sid: 'S-123-456', 
  grouplist: [ { _id: 1, ProcessId: 10, Sid: 'S-123-456', Users: [ 'user1', 'user2'] }] }

但是相反,我正在'Script executed successfully, but there are no results to show'使用Robo 3T。

森瑟·德娃(Senthur Deva)

试试这个,它工作正常。您的let关键字必须以小写字母开头

    db.acls.aggregate([
   {
      $lookup:
         {
           from: "groups",
           let: { processid: 10, sid: "$Sid" },
           pipeline: [
              { $match:
                 { $expr:
                    { $and:
                       [
                         { $eq: [ "$ProcessId",  "$$processid" ] },
                         { $gte: [ "$Sid", "$$sid" ] }
                       ]
                    }
                 }
              }
           ],
           as: "grouplist"
         }
    }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章