我有以下示例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”});
这不是给我结果。有人可以建议我怎么做。
注意:我理解它在列表<地图<字符串,地图<字符串,字符串> > > 格式,我正在查询Map对象的值部分。但是无法获得如何获取结果的任何线索。
答案 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>>>