在$elemMatch过滤掉数组后,是否可以根据数组的大小返回记录?
例如,如果我在一个集合中有许多记录,如下所示:
[
{
contents: [
{
name: "yorkie",
},
{
name: "dairy milk",
},
{
name: "yorkie",
},
]
},
// ...
]
我想找到所有的记录,其中他们的contents
字段包含2个数组项,他们的name
字段等于“yorkie”,我该怎么做呢?澄清一下,数组可以包含其他项,但只要其中2个数组项具有匹配的字段:值,就满足条件。
我知道我可以使用$elemMatch
(或contents.name
)来返回数组中至少包含一个与该名称匹配的项的记录,我也知道我可以使用$size
来根据记录字段中数组项的确切数量进行过滤,有没有一种方法可以将它们组合在一起?
2条答案
按热度按时间wgeznvg71#
不在
find
查询中,但可以通过聚合来完成:我解释了
只要这些数组项中有2个具有匹配的field:value,则满足条件
这意味着如果至少2个数组项具有
name
中的匹配值,则满足标准。xhv8bpkk2#
我知道这个线程很旧,但是今天您可以使用find
reduce函数在这里起作用,它将返回与条件匹配的对象数