以下是我设计的“Famous Recipes”数据库的概念结构 .
此结构与$ redact聚合章节中的MongoDB示例类似 .
最大的区别是我希望对部分和子部分进行命名访问,以及存储在“tags”数组中的对象中的附加信息,而不是MongodB示例中的简单字符串 .
问题是我无法制作$ redact条件,因此它可以正确检查tags.name属性 . 我在条件中使用$ elemMatch是不成功的,点符号也会引发错误 .
有什么建议?
{
_id: 1,
title: "Secret Recipes of Fast Food Chains",
tags: [
{ name: "Colonel Sanders", access: ["read"] },
{ name: "Ronald McDonald", access: ["read"] }
],
year: 2014,
subsections: [
{
subtitle: "Colonel Sander's Famous Recipe",
tags: [
{ name: "Colonel Sanders", access: ["update", "delete"] },
{ name: "Ronald McDonald"}
],
ingredients: ["salt", "pepper", "paprika", "garlic powder"]
]
{
subtitle: "Ronald McDonald's McNugget Sauce",
tags: [
{ name: "Colonel Sanders" },
{ name: "Ronald McDonald", access: ["update", "delete"] }
],
ingredients: ["mustard", "ketchup", "salt", "vinegar"]
}
}
我的非工作查询将读取如下内容:
var access = "Colonel Sanders"
db.recipes.aggregate(
[
{ $match: { "year": 2014 } },
{ $redact:
{
$cond: {
if: { $eq: [ tags: { $elemMatch : { "name" } }, access ] },
then: "$$DESCEND",
else: "$$PRUNE"
}
}
}
]
)
1 回答
老问题,但我遇到了同样的问题 .
首先,您的示例已修复:
之后我写了以下查询:
试一下 . 您可以在其他问题上找到更多信息:3985214