Mongodb+;Mongoose:$redact处理文档访问

Mongodb+;Mongoose:$redact处理文档访问,mongodb,mongoose,Mongodb,Mongoose,来自官方mongodb文档: 我正在使用$redact操作符按访问标签过滤文档在官方指南中,它使用userAccess静态数组来过滤文档。在我的代码中,我希望您使用基于所有者字段值的动态数组 Data.aggregate([ { $match: {owner: {$in: followings}}}, { $redact: { $cond: { if: { $gt

来自官方mongodb文档:

我正在使用$redact操作符按访问标签过滤文档在官方指南中,它使用userAccess静态数组来过滤文档。在我的代码中,我希望您使用基于所有者字段值的动态数组

    Data.aggregate([
     { $match: {owner: {$in: followings}}},
     { $redact:
         {
            $cond:
               {
                 if: { $gt: [ { $size: { $setIntersection: [ "$circles", user.followers.id("$owner").circles ] } }, 0 ] },
                 then: "$$DESCEND",
                 else: "$$PRUNE"
               }
         }
     }
   ], function(err,result) {
        if(err)
            return next(err);

        console.log(result);

    });

如何使用表达式user.followers.id(“$owner”).circles访问owner值?

您不能这样做。在服务器上执行聚合代码之前,对java脚本语句进行求值。这意味着,“$owner”将被视为字符串文本,而不是从文档上下文中获取,并传递给
id
函数。获得的值将作为要执行的聚合代码的一部分传递给服务器。对于以下
数组中的所有可能值,您可以先使用
数组
中的
圆圈
,然后将其传递给
$setcrossion
操作符。然后唯一可能的解决方案是应用程序级过滤回调中的结果数组。您能给出一个文档的示例吗?您能否将所有者的
圆圈
存储在文档中,并将其与
圆圈
相交?示例是两个集合:1)具有追随者数组的用户集合。每个follower包含follower _id和当前用户添加的圆圈。2) 收集员额。每个帖子都包含帖子id、用户所有者id和共享帖子的圆圈。有关完整的文档化示例,请访问: