如何模拟mongodb聚合查询中的循环?
我的数据库中有如下文档:如何模拟mongodb聚合查询中的循环?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我的数据库中有如下文档: { _id: "", "name":"myname", category: "abc", category1: "abc1" } { _id: "" "name":"myname", category: "bcd", category1: "bcd1&
{
_id: "",
"name":"myname",
category: "abc",
category1: "abc1"
}
{
_id: ""
"name":"myname",
category: "bcd",
category1: "bcd1",
category2: "bcd2"
}
如果类别字段可以增加到任意数量,则不预先定义,但如果存在category2
,则肯定也存在category1
。
层次结构就像
category -> category1 -> category2 -> ......
现在,如果我想进行搜索
,将给定文本
与文档的所有类别进行匹配,而不知道当前的数字类别,我需要类似于循环的东西
db.collection('collection', aggregate([
$match: {
"category": 'text',
"category1": 'text',
.
.
so on
}
]));
如何实现这一点?假设类别总数是有界的,用$or连接每个类别写一个条件。这可能很费劲,但它应该会起作用。你能举个例子吗,我不明白为什么不创建一个类别数组?@Joe我正在考虑创建一个类别数组,但在那之后,我不确定如何在它们上实现匹配?你能帮忙吗?这是糟糕的模式设计。您应该将categories设置为字符串数组,如{categories:[“abc”、“bcd”、“xyz”]}
。通过这种方式,您可以为类别
字段创建索引,从而实现高效查询并避免集合扫描。如果需要维护类别的顺序,请将它们设置为对象数组,如[{id:1,name:abc},{id:2,name:bcd}]