我有一个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"
}
]
}
]
}
我想投影数组元素的type
字段identities
,但仅限于我正在查询的特定用户。位置运算符获得正确的用户:
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 }
)
但这并不好,因为根据文档:
MongoDB 忽略 $ 之后的路径部分
有没有办法做到这一点?