【发布时间】:2018-04-30 19:30:12
【问题描述】:
假设一个简单的设置,其中 MongoDB 聚合管道包含两个基本步骤:
- 匹配想要的文档($match)
- 检查文档的权限 ($redact)
这可以像
db.thingies.aggregate(
[
{ $match: { SOME_CONDITION } },
{ $redact: {
$cond: {
if: { SOME_PERMISSION_CHECK },
then: "$$KEEP",
else: "$$PRUNE"
}
}
}
]
);
现在假设您执行了这个 2 阶段管道,结果为空。有什么方法可以确定这是否是:
- 404:未找到($match 结果为空?),或
- 403:禁止($redact 结果为空)
简而言之,空结果是在第 1 阶段达到还是在第 2 阶段达到?
【问题讨论】:
-
目前还不清楚你在这里问什么,充其量你基本上是在问“意见”,这是题外话,不会给你高质量的答案(如果有的话)。而不是理论前提是,您为什么不实际向人们展示您正在努力实现的目标,然后我们实际上可以为您提供有关如何完成目标的事实答案。就目前而言,这个问题有太多的概括性。如果您想处理“对象级权限”,那么实际上“向我们展示”需要发生什么以及需要检查哪些类型的数据。数据是主要的。
-
@Iwallent,您需要定义
SOME_PERMISSION_CHECK的含义,并提供您的data set -
@NeilLunn 老实说,我不觉得这个问题太笼统。我已经对其进行了一些编辑,但我基本上只是询问是否有任何方法可以确定在第 2 阶段之前管道是否为空。$match 后面是 $redact。可以在到达 $redact 阶段之前判断结果是否为空吗?我删除了最后一个正确征求意见的问题。实际情况/检查对我的要求并不重要。
-
基本上是在问?然后不是你认为你这样做的方式。但是,如果您想要一个真实的答案,那么您需要展示一个具有预期结果的真实文档。这实际上是您在这里提出的问题的预期。见How to create a Minimal, Complete, and Verifiable example。顺便说一句,我们真的不同意,这就是为什么你会吸引密切的选票,以及为什么你被要求在你的问题结束之前澄清这些事情。
标签: mongodb aggregation-framework