如果我有一些结构类似的文档
{
"group": "GroupA",
"people": {
"Joe": [
{
"type": "home",
"address": "123 Fake St"
},
{
"type": "work",
"address": "345 Work Pl"
}
],
"Mary": [
{
"type": "home",
"address": "1 Main St"
},
{
"type": "work",
"address": "345 Work Pl"
}
],
"Bob": [
{
"type": "home",
"address": "1 Main St"
}
]
}
}
我如何查询一个人的组地址为“ 345 Work Pl”。我试图使用$ elemMatch,但这似乎只能查询甚至没有列表的第一级。我希望整个文档至少有一个匹配项。
答案 0 :(得分:0)
我认为,如果您可以采用这种结构,那么进行更多查询会更好,更容易
这是主意
// group collection
[
{
id: '1'
name: 'groupA'
}
]
// people collection
[
{
id: 1
name: 'Joe',
type: 'home',
address: '123 Fake St',
group: 1
}, {
id: 2,
name: 'Mary',
address: '1 Main St'
group: 1
}
]
在这种结构中,您可以通过执行以下操作检索所需的数据:
db.people.find({ address: '345 Work Pl' })
如您所见容易得多。
现在,如果您需要每次显示组名时都可以将其存储在每个人中。