簡體   English   中英

使用查詢作為聚合表達式

[英]Using query as expression in aggregate

我需要使用普通過濾器查詢作為$cond條件中的聚合表達式。

例如使用這個“條件”,什么將被用作過濾器

'$and':[{'foo':'xxx'},{'bar':'zzz'}]

作為這個“條件”,將在聚合中使用的等效形式

'$and'[{'$eq':['$foo','xxx']},{'$eq':['$bar':'zzz']}]

這樣做的原因是我存儲了某些過濾器並且在某些時候我需要針對某些文檔測試它們,但是因為它們有多個,出於性能原因我想避免使用多個順序查找查詢來執行它,所以它可能是像這樣使用

aggregate([
    { 
        $match: { <match the document> } 
    },
    { 
        $project: {
            0: {$cond: [ <filter0>, true, false]},       
            1: {$cond: [ <filter1>, true, false]},
            2: {$cond: [ <filter2>, true, false]},
            ....
        }
    }
])

我想通過在$cond中使用查詢來實現的是保證結果與其在 $match 或 find() 中的使用的一致性

所以我需要的基本上是'inverse $expr'。

您可以使用$facet對同一數據運行多個查詢。

aggregate([
    { 
        $match: { <match the document> } 
    },
    { 
        $facet: {
            0: [{$match: {query0}}],       
            1: [{$match: {query1}}],
            2: [{$match: {query2}}],
            ....
        }
    }
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM