MongoDB聚合项目基于匹配条件的不同字段?
我正在MongoDB中使用MongoDB聚合项目基于匹配条件的不同字段?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正在MongoDB中使用aggregation编写一个查询,如果条件1匹配,那么我想投影一些字段,当条件2匹配时,我想投影一些不同的字段,当第三个条件3达到时,我想投影一些其他不同的字段 我的问题如下 { $match: { $and: [ { {field_a: "henesa"} }, { $expr: {
aggregation
编写一个查询,如果条件1
匹配,那么我想投影一些字段,当条件2
匹配时,我想投影一些不同的字段,当第三个条件3
达到时,我想投影一些其他不同的字段
我的问题如下
{
$match: {
$and: [
{
{field_a: "henesa"}
},
{
$expr: {
$or: [
{ Condition 1}, {Condition 2}, {condition 3}
]
}
}
]
}
},
{$project: { /* Here How To Decide which params to send */}}
谁能告诉我怎么做。您可以在投影阶段使用的语法
在
部分中,您可以使用它根据您的标准投影值。例如
{ $project: {
field: { $switch: {
branches: [
{ case: Condition 1, then: "$field1" },
{ case: Condition 2, then: "$field2" },
...
]
} }
} }
或更复杂的组合,如果您需要处理满足多个$或条件的情况。您可以在投影阶段使用的:
语法
在
部分中,您可以使用它根据您的标准投影值。例如
{ $project: {
field: { $switch: {
branches: [
{ case: Condition 1, then: "$field1" },
{ case: Condition 2, then: "$field2" },
...
]
} }
} }
或者更复杂的组合,如果您需要处理满足多个$或
条件的情况。在我描述的查询中,文档首先匹配查询,如果整个查询匹配,则仅投影结果,但在您的情况下,一些文档在$project阶段被拒绝,所以你不认为这会导致你的查询延迟吗。由于一些文档在$project阶段被拒绝,而这些文档本应在$match阶段首先被拒绝。如果不清楚投影阶段是否取代整个管道,我将更新答案。这是如何决定发送哪个参数的示例*/}
问题的一部分。投影舞台不会拒绝任何东西。它会重新塑造上一阶段提供的文档。您同时在$project和$match中写入条件?因为如果您再次写入,则在$project阶段将再次花费一些额外的时间来检查条件是否正确?是的,$match和$project阶段中的条件应该相同。这就是为什么我在问题中加入了你发布的确切条件。是的,它会花费额外的CPU滴答声。如果你问如何免费获得它,你应该在问题中说明。答案很简单——你不能。在我描述的查询中,文档首先匹配查询,如果整个查询匹配,则只投影结果,但在你的情况下,一些文档在$project阶段被拒绝,因此你不认为这会导致查询延迟吗。由于一些文档在$project阶段被拒绝,而这些文档本应在$match阶段首先被拒绝。如果不清楚投影阶段是否取代整个管道,我将更新答案。这是如何决定发送哪个参数的示例*/}
问题的一部分。投影舞台不会拒绝任何东西。它会重新塑造上一阶段提供的文档。您同时在$project和$match中写入条件?因为如果您再次写入,则在$project阶段将再次花费一些额外的时间来检查条件是否正确?是的,$match和$project阶段中的条件应该相同。这就是为什么我在问题中加入了你发布的确切条件。是的,它会花费额外的CPU滴答声。如果你问如何免费获得它,你应该在问题中说明。答案很简单明了——你不能。