【发布时间】:2016-12-30 14:28:06
【问题描述】:
我有如下示例 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"});
我也可以使用上述查询获得结果。
现在我要过滤 subscriptions 数组中的数据,该数组由 "subs_id" = "111" 组成。
我尝试如下
db.testTable.find({"subscriptions.subs_id":"111"});
这没有给我结果。有人可以建议我如何做到这一点。
注意:我知道它是 List > > 格式,我正在查询 Map 对象的值部分。但无法获得任何线索如何获取结果。
【问题讨论】:
-
您应该尝试通过将订阅更改为嵌入文档列表来修复订阅。像
{"subs_key":"12", "subs_id": "111", "state": "5", }这样的东西,你可以使用db.testTable.find({"subscriber.id":"123", "subscriptions.subs_id":"111"},{"subscriptions.$":1);找到订阅 -
同意 sagar 所说的。如果 mongo 有通配符字段名称搜索,那么会有不同的故事,但现在你的文档可能需要调整。为什么用数字标记您的文档?有什么原因吗?
-
感谢您的意见。但我无法更改来自客户端的输入数据格式。只需要以给定的格式过滤数据..任何没有数据调整的建议都会被应用..!
-
您只是在示例中缺少键值
12。db.testTable.find({"subscriptions.12.subs_id":"111"})工作。 -
亲爱的@DaveCoast 请找到更新的 JSON。 subs_id=111 可以有多个值,但其键可以不同。
标签: java json mongodb mongodb-query