如何在MongoDB中的多个嵌套数组中插入和查找对象?

时间:2017-08-22 12:54:07

标签: javascript arrays json node.js mongodb

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

{
    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 - 如果我只需要从特定城市的某个特定区域获取居民数组,我该如何使用投影算子来过滤这个? (我希望mongo过滤,而不是应用程序。)

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

1 个答案:

答案 0 :(得分:1)

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

  

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

但是你可以使用另一种模式,如:
将Habitant doc带到最高级别 这是一份Habitant doc:

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

使用此模式您可以对数据进行规范化或非规范化,并可以轻松地查询和投影数据。

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