【发布时间】:2021-05-10 21:30:20
【问题描述】:
我有一个families 收藏。其中的文档有一个users 数组。鉴于这份家庭文件:
{
"id" : "1",
"users" : [
{
"id" : "2",
"identities" : [
{
"type" : "email",
"email" : "foo"
},
{
"type" : "email",
"email" : "bar"
}
]
},
{
"id" : "3",
"identities" : [
{
"type" : "email",
"email" : "baz"
},
{
"type" : "email",
"email" : "qux"
}
]
}
]
}
我想投影identities 数组元素的type 字段,但仅限于我查询的特定用户。位置运算符获得正确的用户:
db.families.findOne(
{ 'users.id': '2' },
{ 'users.$': 1 }
)
我可以指定我感兴趣的字段:
db.families.findOne(
{ 'users.id': '2' },
{ 'users.identities.type': 1 }
)
但是当两者结合时,只考虑位置运算符:
db.families.findOne(
{ 'users.id': '2' },
{ 'users.$': 1, 'users.identities.type': 1 }
)
(返回 id 为 2 的用户,但返回所有字段的身份数组元素)。 想试试这个:
db.families.findOne(
{ 'users.id': '2' },
{ 'users.$.identities.type': 1 }
)
但是自从per the docs之后就不行了:
MongoDB 会忽略 $ 之后的路径部分
有办法吗?
【问题讨论】:
标签: mongodb projection embedded-documents positional-operator