在嵌套数组 MongoDB 中查找特定元素

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

数据库架构

[{
  "_id": 1,
  "name": "city1",
  "districts": [
    {
      "id": 5,
      "name": "district 1",
      "neighborhoods": [
        {
          "id": 309,
          "name": "neighborhood 1"
        }
      ]
    },
    {
      "id": 6,
      "name": "district 2",
      "neighborhoods": [
        {
          "id": 52280,
          "name": "neighborhood 2"
        }
      ]
    }
},
{
  "_id": 1,
  "name": "city2",
  "districts": [
    {
      "id": 5,
      "name": "district 3",
      "neighborhoods": [
        {
          "id": 309,
          "name": "neighborhood 3"
        }
      ]
    },
    {
      "id": 6,
      "name": "district 4",
      "neighborhoods": [
        {
          "id": 52280,
          "name": "neighborhood 4"
        },
        {
          "id": 52287,
          "name": "neighborhood 5"
        }
      ]
    }
}]

目标

我希望能够检查 3 元组组合是否有效。给定 namedistricts.namedistrict.neighborhoods.name 的一些值;我想检查这 3 个值是否确实代表有效组合。 valid 我的意思是它们相互嵌套。

例一

如果给我

city1
district 1
neighborhood 1
作为输入,这是一个有效的组合(因为它们相互嵌套)

例二

如果给我

city2
district 4
neighborhood 4
作为输入,这是一个有效的组合

示例 3

如果给我

city1
district 1
neighborhood 2
作为输入,这NOT有效组合(因为它们没有相互嵌套)

示例 4

如果给我

city1
district 3
neighborhood 3
作为输入,这NOT一个有效的组合

预期产出

假设我分别为

name
districts.name
districts.neighborhoods.name
给出了city1district 1neighborhood 1(有效组合)。输出应该是:

{
  "_id": 1,
  "name": "city1",
  "districts": [
    {
      "id": 5,
      "name": "district 1",
      "neighborhoods": [
        {
          "id": 309,
          "name": "neighborhood 1"
        }
      ]
    }
}

假设我分别为

name
districts.name
districts.neighborhoods.name
给出了city1district 1neighborhood 2NOT有效组合)。输出应该为空或 null 或表示具有这些值的数组元素不存在的东西。

当前方法

doesLocationExist = await locationDbConnection.find_one(
        { "location" : {
            "$elemMatch" :  
                {"name" : city, "districts.name" : district, "districts.neighborhoods.name": neighborhood}
            }
        }
    )

我希望如果组合有效,这会返回一个文档,但即使组合有效,它也总是返回

None
。 基本上我想做的是使用“路径”(前面提到的三元组输入)检索一个双嵌套数组元素;如果该元素存在,则意味着它是一个有效的组合,否则,它不是。

之前没有帮助的问题

P.S: 街区和地区名称不是唯一的,所以我不能使用投影只显示感兴趣的数组元素

python mongodb nosql fastapi
© www.soinside.com 2019 - 2024. All rights reserved.