在汇总中查找({示例:{$ elemMatch:{$ eq:userId}}})..-有可能吗?

时间:2019-05-15 12:20:10

标签: mongodb mongoose match aggregate

database:
[{to_match: [ userID_1, userId_2 ], data: [{...}] },
{to_match: [ userID_1, userId_2, userId_3 ], data: [{...}] },
{to_match: [ ], data: [{...}] }]
  1. 在“匹配”数组中查找元素。

当前解决方案:

Replacement.find(
   { applicants: { $elemMatch: { $eq: userId_1 } } },
  1. 根据$ 1的结果汇总$ lookup。
    一种。我可以查找和汇总吗?
    b。我应该先汇总再匹配吗?
    • 如果是,如何匹配数组中的元素?

我尝试了汇总:

$lookup // OK
{ $match: { applicants: { $in: { userId } } } } // issues

谢谢

2 个答案:

答案 0 :(得分:0)

总计使用$ lookup和$ match

使用$ elemMatch代替$ in,如下所示:

{ $match: { applicants:  { $elemMatch: { $eq: userId_1 }  } } }

答案 1 :(得分:0)

仅在一个字段上执行$ elemMatch等同于使用find(link

通常,有效的方法是限制查找阶段将要处理的数据。 因此,如果我理解正确,则希望过滤“ to_match”数组元素,然后对该结果进行查找。

这是我的建议:-

    aggregate([
    {
        $project : {
            to_match: {
                    $filter: {
                           input: "$to_match",
                           as: "item",
                           cond: { $eq: [ "$$item", "userId_3" ] }
                        }
            },
            data : 1
        }
    },
    {
        $match : { "to_match" : {$ne : []}}
    },
    //// Lookup stage here
])

根据您要查找的字段,您可能希望取消此结果。