我正在查询一个集合,并且在那个集合中我有一个对象数组。在该数组中,我想使用投影仅在每个对象中返回一个字段。但是,我不想删除该对象之外的所有数据。
假设集合中的一个文档看起来像这样
{
"a": "some val",
"b": "some other val",
"c": [
{
"d": "some array val",
"e": "some other array val"
}
]
}
假设我要删除数组中除“ d”之外的所有字段并以
结尾{
"a": "some val",
"b": "some other val",
"c": [
{
"d": "some array val",
}
]
}
我尝试过:
db.collection.find({}, { "c.d": 1 })
但是这也删除了“ a”和“ b”并返回:
{
"c": [
{
"d": "some array val",
}
]
}
我也不能:
db.collection.find({}, { "c.e": 0 })
因为“ e”以外可能还有其他字段,因此也应将其隐藏。
答案 0 :(得分:1)
您可以运行$addFields覆盖现有字段,运行$map转换c
数组并仅获取d
值,请尝试:
db.collection.aggregate([
{
$addFields: {
c: {
$map: {
input: "$c",
in: { d: "$$this.d" }
}
}
}
}
])