【问题标题】:How can I insert and find an object inside a multiple nested array in MongoDB?如何在 MongoDB 的多个嵌套数组中插入和查找对象?
【发布时间】:2017-08-22 12:54:06
【问题描述】:

我在尝试将对象插入到 mongoDB 的 mongoose 架构中的多个嵌套数组中时遇到问题。我有以下结构:

{
    contries: [{
        name: 'String',
        states: [{
            name: 'String',
            cities: [{
                name: 'String',
                regions: [{
                    name: 'String',
                    habitants: [{
                            name: 'String',
                            age: Number
                        },
                        {
                            name: 'String',
                            age: Number
                        }
                    ]
                }]
            }]
        }]
    }]
}

1 - 假设我想在特定城市的特定区域内插入居民等等,我该如何构建查询?

2 - 如果收到整个 json 对象作为请求,我需要检查是否存在任何国家、城市、州或地区,如果不存在,我需要创建并插入居民在数组中。

3 - 如果我只需要从特定城市的一个特定区域获取 habitants 数组,我该如何使用投影运算符进行过滤? (我希望 mongo 过滤,而不是应用程序)。

4(BONUS) - Habitants 数组只包含一个 habitant 对象的对象 ID,只需要使用 populate?

【问题讨论】:

标签: javascript arrays json node.js mongodb


【解决方案1】:

用 mongodb 做这些事情是不可能的。
根据 mongodb 文档,它不可能遍历数组中超过 1 个部门。

位置 $ 运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为 $ 占位符的替换是单个值。

但是,您可以使用其他架构,例如:
将 Habitant 文档带到顶层
这是一个 Habitant 文档:

{
  name: 'hab1',
  country: 'country1',
  city: 'cit1',
  region: 'region1'
}

使用此架构,您可以对数据进行规范化或反规范化,并且可以轻松查询和投影数据。

更新: 这个 mongodb 限制似乎在不久的将来会解决 https://jira.mongodb.org/browse/SERVER-27089

【讨论】:

  • 你说得对,我会改变我的架构,谢谢@kailniris
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 2020-01-24
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多