我在尝试在我的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?
答案 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