【问题标题】:MongoDB - match all nested object property paths dynamicallyMongoDB - 动态匹配所有嵌套对象属性路径
【发布时间】:2021-05-26 21:10:43
【问题描述】:

以上是我在MongoDB Store中的数据结构。假设我查询如下

{'symbol_alerts.[CHANNEL_ID_STRING].usdt_alerts: {$exists: true}}

我想动态匹配symbol_alertspath 中的所有CHANNEL_ID_STRINGS,所以我可以查询所有频道中usdt_subs 的存在。知道如何匹配所有CHANNEL_ID_STRINGs,无论其价值如何?

【问题讨论】:

    标签: javascript mongodb mongoose mongodb-query


    【解决方案1】:

    解决方案 #1:

    var CHANNEL_ID_STRING = "abc"
    
    var condition = {}
    
    condition[`symbol_alerts.${CHANNEL_ID_STRING}.usdt_alerts`] = { $exists: true };
    
    db.dynamicKeys.find(condition);
    

    基于this answer的解决方案#2:

    let CHANNEL_ID_STRING = "abc";
    
    db.dynamicKeys.aggregate([
        {
            $project: {
                dynamicKeys: { $objectToArray: "$symbol_alerts" }
            }
        },
        {
            $match: {
                "dynamicKeys": {
                    $elemMatch: {
                        k: CHANNEL_ID_STRING,
                        "v.usdt_alerts": { $exists: true }
                    }
                }
            }
        },
        {
            $project: {
                "symbol_alerts": { $arrayToObject: "$dynamicKeys" }
            }
        }
    ]);
    

    这就是我的样本集合的样子:

    /* 1 createdAt:2/24/2021, 8:08:54 PM*/
    {
        "_id" : ObjectId("603664fe24f3423874ac9534"),
        "symbol_alerts" : {
            "jkl" : {
                "other_key" : {
                    "key1" : "value1"
                }
            },
            "mno" : {
                "usdt_alerts" : {
                    "key1" : "value1"
                }
            }
        }
    },
    
    /* 2 createdAt:2/24/2021, 8:08:54 PM*/
    {
        "_id" : ObjectId("603664fe24f3423874ac9533"),
        "symbol_alerts" : {
            "abc" : {
                "usdt_alerts" : {
                    "key1" : "value1"
                }
            },
            "def" : {
                "other_key" : {
                    "key1" : "value1"
                }
            },
            "ghi" : {
                "usdt_alerts" : {
                    "key1" : "value1"
                }
            }
        }
    }
    

    【讨论】:

    • 是的,这是使用动态编程。但是有没有办法只使用 Mongo 查询?可能是正则表达式过滤器?
    • 所以现在它在 MongoDB 级别是“动态的”。我不知道您希望过滤结果如何。如果您更新问题,我将修改查询。
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多