Mongodb+;Mongoose:$redact处理文档访问
来自官方mongodb文档: 我正在使用$redact操作符按访问标签过滤文档在官方指南中,它使用userAccess静态数组来过滤文档。在我的代码中,我希望您使用基于所有者字段值的动态数组Mongodb+;Mongoose:$redact处理文档访问,mongodb,mongoose,Mongodb,Mongoose,来自官方mongodb文档: 我正在使用$redact操作符按访问标签过滤文档在官方指南中,它使用userAccess静态数组来过滤文档。在我的代码中,我希望您使用基于所有者字段值的动态数组 Data.aggregate([ { $match: {owner: {$in: followings}}}, { $redact: { $cond: { if: { $gt
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和共享帖子的圆圈。有关完整的文档化示例,请访问: