Mongodb - 使用变量键查询嵌入对象

时间:2017-02-13 13:52:19

标签: mongodb

我有一个包含以下对象的Mongo DB:

"clients" : {
    "x" : {
        "clientId" : "x1",
        "mainInfo" : {
                       ...
        },
        "events" : 
            {
            "58a176bbc3588410cd5450c6" : {
                "clientType" : "5001",
                "location" : "60001"
                }
            "58a176bbc3588410cd5450c8" : {
                "clientType" : "5001",
                "location" : "60002"
                }
                  ....}

我似乎无法弄清楚如何查询'clients.x.events。(变量ID).clientType'= 50001.哪里有一种方法可以在事件嵌入对象内部向下钻取以获得与“clientType”匹配的所有记录:“5001”?

谢谢

2 个答案:

答案 0 :(得分:0)

您需要创建如下所示的键值对象。

var variable_id = <your variable id>;
db.collection.find({ [ 'clients.x.events.'+variable_id+'.clientType' ]:5001 });

详细了解此here

答案 1 :(得分:0)

也许你可以使用$where运算符。它对我有用。

  

使用$ where运算符传递包含a的字符串   JavaScript表达式或查询的完整JavaScript函数   系统

db.collection.find({"$where" : function(){ 
    for( var c in this ){
        if( c == "x" ){ 
            for(var i in this[c]){ 
                 for(var j in this[c][i]){
                      if(j == 'clientType' && this[c][i][j] == '5001'){
                           return true;
                      }
                 }
             }
        };
     }
     return false; 
}});

希望这有帮助。