【发布时间】:2020-08-06 23:24:39
【问题描述】:
您好,我正在尝试对嵌套文档数组编写条件查询。 我已经阅读该文档好几天了,但无法弄清楚如何进行这项工作。 DB 如下所示:
[
{
"id":1,
"team":"team1",
"players":[
{
"name":"Mario",
"substitutes":[
"Luigi",
"Yoshi"
]
},
{
"name":"Wario",
"substitutes":[
]
}
]
},
{
"id":2,
"team":"team2",
"players":[
{
"name":"Bowser",
"substitutes":[
"Toad",
"Mario"
]
},
{
"name":"Wario",
"substitutes":[
]
}
]
}
]
由于我不会英语,很难说,但我想做的是 查找包含所有被查询玩家的团队。 球员阵列中的每个对象,有些都有替补。 对于球员数组中的每个对象,如果查询到的球员之一不是主要球员(“players.name”),那么我希望它寻找一个替代品(“players.substitutes”)是否是。
Team.find({players:{$in:[ 'Mario', 'Wario' ]}}) (mongoose query)
这会给我一个带有“team1”的数组。
但我想要的是两支球队,因为“Mario”是“Bowser”(team2)的替代品之一。
我没有进行查询,但我一直在尝试不使用 $where,因为官方 MongoDB 文档说:
首选聚合替代方案
从 MongoDB 3.6 开始,$expr 运算符允许使用 查询语言中的聚合表达式。而且,从 MongoDB 4.4,$function 和 $accumulator 允许用户定义 如果提供的管道,JavaScript 中的自定义聚合表达式 运营商无法满足您的应用程序的需求。
鉴于可用的聚合运算符:
$expr 与不使用 JavaScript 的聚合运算符一起使用 (即非 $function 和非 $accumulator 运算符)比 $where 因为它不执行 JavaScript 并且应该是首选 如果可能的话。但是,如果您必须创建自定义表达式,$function 优先于
$where。
但是如果它可以很容易地用$where 运算符编写,那就完全没问题了。
我们将不胜感激任何有助于进一步发展的建议或想法。
【问题讨论】: