MongoDB聚合框架父子关系复杂查询

问题描述 投票:0回答:1

我是 mongodb 的新手,所以我希望这不会成为一个非常基本的问题。我尝试应用我所发现的内容,但不知何故我遗漏了某些部分并且需要帮助:

我有两个父子集合,格式如下:

集合名称:成员(家长记录)

{
    {
        recordNo: 101, //member id
        registerdDate: '01-Jan-2024',
        personName : "James"
    },
    {
        recordNo: 102,
        registerdDate: '05-Feb-2024',
        personName : "Smith"
    },
    {
        recordNo: 103,
        registerdDate: '16-Aug-2023',
        personName : "Alex"
    }
}

集合名称:memberActivities(子记录)

{
    {
        recordNo: 101, //Reference to members.recordNo in above collection
        activityDate: '05-Jan-2024',
        activity:[ //Array
            0:{ Comments: "Played Chess" }
            1:{ Comments: "Played Hockey" }
            2:{ Comments: "Played Cricket" }
        ]       
    },
    {
        recordNo: 101,
        activityDate: '06-Jan-2024',
        activity:[ //Array
            0:{ Comments: "Outing with friends" }
        ]       
    },
    {
        recordNo: 102,
        activityDate: '08-Feb-2024',
        activity:[ //Array
            0:{ Comments: "Played Basketball" }
        ]       
    },
    {
        recordNo: 103,
        activityDate: '20-Sep-2023',
        activity:[ //Array
            0:{ Comments: "Played Cricket" }
        ]       
    }
}

我应该如何在 MongoDB 中形成“聚合查询”以获得以下输出:

  1. 获取在“2024年1月1日”至“2024年2月29日”期间注册并至少玩过一次“板球”的所有“会员”的“计数”。
  2. 获取在“2024年1月1日”至“2024年2月29日”期间注册且从未玩过“板球”的所有“会员”的“计数”。

我正在 MongoDB 指南针中执行脚本来进行查询。

mongodb-query aggregation-framework mongodb-compass nosql-aggregation
1个回答
0
投票

首先,如果你想按日期过滤,你应该将这些字段设置为日期类型,而不是字符串。 示例.

然后您可以使用 $lookup 连接两个集合,并使用 $match 在数组中进行过滤以包含或排除活动。

示例包括

排除示例

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.