【发布时间】:2020-12-09 16:37:50
【问题描述】:
我正在尝试查找具有与搜索键匹配的元素的文档。在下面的示例中,我有 6 个具有主要和次要类别的文档。
文档格式为:
{
docID: <some proxy ID>,
classCategories: {
[
"<major classification>" : [ "<array of sub classifications>" ]
]
}
}
我有以下两个问题:
- 查找所有主要分类为“2”且包含子分类“2”的文档。
- 查找所有主分类为“1”且包含子分类“3”的文档。
测试代码在这里:
db.test.delete_many({})
db.test.insert_one({"docID": 1, "classCategories": {"1": [1], "2": [2]}})
db.test.insert_one({"docID": 2, "classCategories": {"1": [1, 3], "2": [2, 4]}})
db.test.insert_one({"docID": 3, "classCategories": {"1": [1], "2": [2, 6]}})
db.test.insert_one({"docID": 4, "classCategories": {"1": [1], "2": [2]}})
db.test.insert_one({"docID": 5, "classCategories": {"1": [1]}})
db.test.insert_one({"docID": 6, "classCategories": {"2": [2]}})
results=db.test.find()
print("All Data")
for r in results:
print("{} -> {}".format(r["docID"], r["classCategories"]))
print("Restricted Data-1")
results=db.test.find({"classCategories": {"2" : [2]}})
for r in results:
print("{} -> {}".format(r["docID"], r["classCategories"]))
print("Restricted Data-2")
results=db.test.find({"classCategories": {"1" : [3]}})
for r in results:
print("{} -> {}".format(r["docID"], r["classCategories"]))
结果在这里:
All Data
1 -> {'1': [1], '2': [2]}
2 -> {'1': [1, 3], '2': [2, 4]}
3 -> {'1': [1], '2': [2, 6]}
4 -> {'1': [1], '2': [2]}
5 -> {'1': [1]}
6 -> {'2': [2]}
Restricted Data-1
6 -> {'2': [2]}
Restricted Data-2
我希望从第一个查询中看到的是文档 1-4 和 6。它们的主要分类为“2”,所有数组都包含一个子分类 2。
在第二个查询中,我希望文档编号为 2,因为它的主要分类为“1”,而子分类数组包含 3。
我应该如何查询这个,和/或我应该考虑不同的文档结构?
【问题讨论】:
标签: python arrays mongodb dictionary pymongo