首页 > 解决方案 > 根据条件查询某个字段

问题描述

这是我正在使用的数据的架构:

{
    _id: ObjectId(),
    field1 : {
        subField1: String,
        subField2: String
    },
    field2 : {
        subField1: String,
        subField2: String
    }
}

我想检查 field1.subField1 或 field2.subField1 是否等于某个值,然后相应地检索其他字段。例如,如果 field1.subField1 等于我要搜索的值,那么我想获取 field2 的值,反之亦然。我尝试使用$elemMatch但无法找出正确的解决方案。谢谢你。

标签: mongodbmongodb-query

解决方案


这是另一种方法,也许比我的其他答案更直接......

再次假设以下文档,并且您希望找到 field1 是“CCC”的位置...

{
    _id: ObjectId(),
    field1 : {
        subField1: "AAA",
        subField2: "BBB"
    },
    field2 : {
        subField1: "CCC",
        subField2: "DDD"
    }
}

...这是聚合...

db.mycollection.aggregate([
    {
        $project:
        {
            desiredValue:
            {
                $switch:
                {
                    branches:
                    [
                        {
                            case: { $eq: [ "$field1.subField1", "CCC" ] },
                            then: "$field1.subField2"
                        },
                        {
                            case: { $eq: [ "$field2.subField1", "CCC" ] },
                            then: "$field2.subField2"
                        }
                    ],
                    default: null
                }
            }
        }
    }
])

这是一个单阶段聚合,带有一个比较字段并选择输出的 switch 语句。


推荐阅读