忽略聚合管道中$ match阶段的字段

时间:2019-01-08 18:55:20

标签: javascript mongodb aggregation-framework graphql

我有一个GraphQL解析器,它使用布尔类型的参数test。在此解析器中,我使用Mongoose进行MongoDB聚合,并根据users参数的值从我的test集合返回文档。

这是我的GraphQL testUsers解析器的外观:

Query: {
    testUsers: async (root, args, context) => {
        return await User.aggregate([
            {
                $match: {
                    test: args.test
                }
            }
        ])
    }
}

在这里,args.test可以是truefalseundefined。处理truefalse的情况仅是直接传递它的问题,但是如果test为{{,我想返回所有用户(与args.test的值无关) 1}}。

undefined阶段是否可以为test传递一个值,而不会考虑$match字段?

1 个答案:

答案 0 :(得分:1)

您可以这样做

testUsers: async (root, args, context) => {
    let match = { test: args.test }
    if(typeof args.test === 'undefined') {
      match = {}
    }
    return await User.aggregate([
        {
            $match: match
        }
    ])
}

如果未定义let,则可以使用args.test变量并更改其值