如何在MongoDB中的多层嵌入式文档中进行查询?
假设我有一个MongoDB(4.2.9)集合,其结构如下:如何在MongoDB中的多层嵌入式文档中进行查询?,mongodb,mongodb-query,Mongodb,Mongodb Query,假设我有一个MongoDB(4.2.9)集合,其结构如下: { _id: 'Alice', pets: { 'Marmaduke': { 'age': 9 }, 'Clifford': { 'age': 3 } } }, { _id: 'Bob', pets: { 'Odie': { 'age': 6
{
_id: 'Alice',
pets: {
'Marmaduke': {
'age': 9
},
'Clifford': {
'age': 3
}
}
},
{
_id: 'Bob',
pets: {
'Odie': {
'age': 6
}
}
}
我如何查询所有宠物年龄超过5岁的主人?理想情况下,投影只包括搜索字段下的匹配嵌入文档,因此结果集看起来就像没有Clifford的示例
在我看来,文档应该很容易回答这个问题,但我能找到的只是匹配嵌入文档数组的操作,而不是嵌入文档的文档。我觉得对文档数组进行建模要常见得多,但我很难理解这一点,因为(在我的用例中)宠物是由其所有者和名称唯一标识的,Marmaduke上的更新操作应该如下所示:
{
_id: 'Alice'
},
{
$set: {
pets.Marmaduke.age: 10
}
}
而不必在数组中查找
{u id:'Marmaduke'}
。但是,如果我应该以不同的方式思考嵌入式文档,请解释。请告诉我这是否是您所需要的。看起来这样就可以了,谢谢。所以最简单的解决方案就是将对象转换成数组,搜索它,然后再转换回来?你知道在查询计划中是否存在明显的性能损失,或者是$objectToArray
和$arrayToObject
被优化了吗?我认为你最好将pets
设置为数组,而不是直接的对象
-例如,你可以将其设置为“pets”[{“name”:“Clifford”,“age”:3}]
-因为除了使用$objectToArray
使查询更昂贵外,还可能需要使用稀疏索引。