我有一份以下表格的文件
{
"_id": "5c9a53b348a0ac000140b5f9",
"e": [
{
"_id": "d6c74cd5-5808-4b0c-b857-57ddbcc72ce5",
"isDeleted": true
},
{
"_id": "d6c74cd5-5808-4b0c-b857-57ddbcc72ce6",
"isDeleted": false
}
]
}
每个文档都有一个元素列表,每个元素可能会删除也可能不会删除。默认情况下,我不想返回已删除的数据。现在,我在服务器端过滤它们,但这仍然意味着大量数据被不必要地传输。是否可以在数据库中排除这些数据?
我看过$elemMatch
,但只返回一个值,所以它看起来不像是工作的正确工具。
有没有办法使用嵌套文档数组来投影文档,只包含那些符合某种条件的子文档?
你可以在这里使用$filter
聚合
db.collection.aggregate([
{ "$addFields": {
"e": {
"$filter": {
"input": "$e"
"cond": { "$eq": ["$$this.isDeleted", true] }
}
}
}}
])