【发布时间】:2021-06-03 02:41:21
【问题描述】:
我的数据库中有这样的文档:
{
_id: "",
"name":"myname",
category: "abc",
category1: "abc1"
}
{
_id: ""
"name":"myname",
category: "bcd",
category1: "bcd1",
category2: "bcd2"
}
类别字段可以达到任何数字,它不是预定义的,但如果category2 存在,category1 也肯定存在。
层次结构是这样的
category -> category1 -> category2 -> ......
现在,如果我想做一个search,在不知道当前数字类别的情况下将given text 与文档的所有类别匹配,我需要类似loop 的东西。
db.collection('collection', aggregate([
$match: {
"category": 'text',
"category1": 'text',
.
.
so on
}
]));
如何做到这一点?
【问题讨论】:
-
为什么不是类别数组?
-
@Joe 我正在考虑制作一个类别数组,但之后不确定如何对它们实施匹配?你能帮忙吗?
-
这是糟糕的架构设计。您应该将类别设为字符串数组,例如
{categories:["abc","bcd","xyz"]}。通过这种方式,您可以为categories字段创建索引,从而实现高效查询并避免收集扫描。如果您需要维护类别的顺序,请将它们设为对象数组,例如[{id:1,name:"abc"},{id:2,name:bcd}]
标签: mongodb mongodb-query aggregation-framework