列表上的Mongo DB查询<map <string,map <string,=“”string =“”>&gt;&gt;

时间:2016-12-30 14:28:07

标签: java json mongodb mongodb-query

我有以下示例JSON。

{
        "subscriber": {
            "id": "123",
            "custom_field1": "0",
            "custom_field2": "0"
        },
        "subscriptions": [{
            "12": {
                "subs_id": "111",
                "state": "5",
            }
        }, {
            "13": {
                "subs_id": "222",
                "state": "8",
            }, {
            "14": {
                "subs_id": "111",
                "state": "8",
            }
        }]
     }

我可以在Mongo DB上查询

  

db.testTable.find({ “subscriber.id”: “123”});

我也可以使用上述查询得到结果。

现在我想过滤订阅数组中包含“subs_id”=“111”的数据。

我试过以下

  

db.testTable.find({ “subscriptions.subs_id”: “111”});

这不是给我结果。有人可以建议我怎么做。

注意:我理解它在列表&lt;地图&lt;字符串,地图&lt;字符串,字符串&gt; &GT; &gt; 格式,我正在查询Map对象的值部分。但是无法获得如何获取结果的任何线索。

1 个答案:

答案 0 :(得分:2)

也许你可以使用$ where

db.testTable.find({$where : "for(var i in this.subscriptions){for(var j in this.subscriptions[i]){if(this.subscriptions[i][j]['subs_id'] && this.subscriptions[i][j]['subs_id'] === '111'){return true;}}}"});

不要诅咒我,db设计是错误的imo。您可能需要重新考虑数据库结构,以获得高效且“愉快”的查询。

$where也很昂贵,因为它不使用索引,它基本上是对所有文档的扫描,因此相对较慢。

另外  我想澄清一下,订阅字段基本上是List<Map<String,Map<String,String>>>