有没有办法在 mongo 聚合期间 'remove' 一个字段?
Is there a way to 'remove' a field during a mongo aggregation?
有没有办法在聚合期间删除字段?
我的结果如下所示:
{
"firstName":"Patient1",
"lastName":"last",
"addresses":[
{
"street1":"1011 Happy Lane",
"street2":"Apt 1",
},
],
"phone":"11111111"
}
我试图从结果中排除 'addresses':
{
"firstName":"Patient1",
"lastName":"last",
"phone":"11111111"
}
我找到了 $unset,但似乎只对更新有效。
我也不想手动 'group' 其他项目,因为我需要 return 除了要排除的属性之外的所有内容。有选择地添加在聚合中似乎很容易,但有选择地删除似乎有点复杂。感谢这里的任何想法。
在管道中使用 $project
阶段。使用投影时,您有两种选择。
首先,您可以通过指定要包含的值为 1
的字段将返回的字段列入白名单。投影舞台看起来像这样:
{ $project: {
firstName: 1,
lastName: 1,
phone: 1
}}
第二个是您可以通过指定您不想包含的值为 0
的字段来将返回的字段列入黑名单。投影舞台看起来像这样:
{ $project: {
addresses: 0
}}
这两种方法都有其优点,您应该使用哪种方法在很大程度上取决于您的用例。一个好的经验法则是,如果您只需要某些字段并且不想在添加新字段时修改投影阶段,则应使用白名单方法,但如果您只想排除某些字段而允许任何要包含在结果中的新字段,您应该使用黑名单方法。
有没有办法在聚合期间删除字段? 我的结果如下所示:
{
"firstName":"Patient1",
"lastName":"last",
"addresses":[
{
"street1":"1011 Happy Lane",
"street2":"Apt 1",
},
],
"phone":"11111111"
}
我试图从结果中排除 'addresses':
{
"firstName":"Patient1",
"lastName":"last",
"phone":"11111111"
}
我找到了 $unset,但似乎只对更新有效。
我也不想手动 'group' 其他项目,因为我需要 return 除了要排除的属性之外的所有内容。有选择地添加在聚合中似乎很容易,但有选择地删除似乎有点复杂。感谢这里的任何想法。
在管道中使用 $project
阶段。使用投影时,您有两种选择。
首先,您可以通过指定要包含的值为 1
的字段将返回的字段列入白名单。投影舞台看起来像这样:
{ $project: {
firstName: 1,
lastName: 1,
phone: 1
}}
第二个是您可以通过指定您不想包含的值为 0
的字段来将返回的字段列入黑名单。投影舞台看起来像这样:
{ $project: {
addresses: 0
}}
这两种方法都有其优点,您应该使用哪种方法在很大程度上取决于您的用例。一个好的经验法则是,如果您只需要某些字段并且不想在添加新字段时修改投影阶段,则应使用白名单方法,但如果您只想排除某些字段而允许任何要包含在结果中的新字段,您应该使用黑名单方法。