我曾经使用填充来合并下面的文档,但是我想使用$ 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
}
}
填充效果好于预期结果
答案 0 :(得分:0)
您编写的resident.pre('init', ()=>{})
钩子不适用于聚合框架。在这种情况下,您需要使用聚合中间件功能。
您可以查看Aggregation Hooks上的猫鼬文档以帮助您