使用预初始化的Mongodb $ lookup

时间:2019-04-03 20:53:58

标签: node.js mongodb mongoose

我曾经使用填充来合并下面的文档,但是我想使用$ lookup来代替,但是当我使用$ lookup时,驻留的profile_key不会散列,但是在填充时它会正确显示

const resident = new Schma({
 _id: ObjectId('abcde'),
 device_key: 'asdf'
 profile_key: 'asdfasdf' //AES 256 key
})

resident.pre('init', doc => {
  let decrypt;
   decrypt = decryptProfile(doc.profile_key);
   doc.profile = decrypt;
   doc.profile_key = {}
})

device.aggregate([
  {$match: cond'},
  {$lookup: {
    from: 'resident',
    localField: 'key',
    foreignField: 'device_key
    as: 'resident'    
  }},
  {$unwind: '$residnet'}
])

预期结果

const device = {
 _id: ObjectId('asdf'),
 key: 'asdf',
 resident: {
   _id: 'abcde',
   device_key: 'asdf',
   profile: {
    name: 'resident 1'
   }
 }
}

实际结果

const device = {
 _id: ObjectId('asdf'),
 key: 'asdf',
 resident: {
   _id: 'abcde',
   device_key: 'asdf',
   profile_key: 'asdfasdf' //not decrpyt 
 }
}

填充效果好于预期结果

1 个答案:

答案 0 :(得分:0)

您编写的resident.pre('init', ()=>{})钩子不适用于聚合框架。在这种情况下,您需要使用聚合中间件功能。 您可以查看Aggregation Hooks上的猫鼬文档以帮助您