MongoDB 查询数组中元素子集的多个条件匹配的所有文档

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

想象一下有一个包含以下条目的集合:

[
{
    "name": "Document 1",
    "dataFields": [
        {
            "fieldId": "641c737896756f2710a827ca",
            "value": "TextA",
            "otherProperties": true
        },
        {
            "fieldId": "641c737ef253e077d16f499a",
            "value": "TextB",
            "otherProperties": true
        }
    ]
},
{
    "name": "Document 2",
    "dataFields": [
        {
            "fieldId": "641c73827693778596d20a9f",
            "value": "Different A",
            "otherProperties": true
        },
        {
            "fieldId": "641c7385b422e717c46f4423",
            "value": "Totally Different",
            "otherProperties": true
        }
    ]
}
]

那些DataFields指向定义这些字段如何工作的

DataFieldDefinition
(即它们的数据类型和其他注释)。该定义还有两个属性isFilterableisSortable

现在为了过滤我的文档,我还需要过滤它们的数据字段。并且只有满足两个标准的那些:

  • fieldId 必须匹配可过滤的
    ObjectIds
    中的许多
    DataFieldDefinitions
    之一。 (假设您已经有了这些 ID 的列表)
  • 那几个字段的value必须匹配一个
    Regex

例一: 如果我的过滤条件是“A”,文档 1 和 2 的字段 1 将匹配,因此我会取回两个文档。

示例 2: 如果我的过滤条件是“diff”,文档 2 的两个字段都会匹配,我只会返回文档 2。

我对 MongoDB 比较陌生,所以我真的不知道它是如何工作的。显然,这需要使用聚合和管道,因为这是一个非常重要的案例,无法通过简单的过滤器解决。

但是我有点不知道如何通过过滤 ID 创建这些 DataFields 的子集,然后检查那些是否至少有一个匹配

Regex
并根据它们的匹配简单地返回
true
false
。然后只返回其子集中至少有一个
true
的文档。

我假设需要方面,但我不知道如何再次加入这些方面。 MongoDB 是否能够做到这一点,或者我只是在这里遇到了技术边界?

很明显,我可以部分地做这个客户端,但这首先会破坏数据库引擎的好处。

PS: 如果您不完全理解我的问题,请告诉我。很难解释,但我已尽力而为,如果需要,我很乐意提供更多信息。

PS2:我正在使用 MongoDB 的 .NET 驱动程序,所以虽然我可能可以解释其他语言,但我更喜欢 MQL 或 C# 代码作为示例。

mongodb mongodb-query mongodb-.net-driver
© www.soinside.com 2019 - 2024. All rights reserved.