Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何模拟mongodb聚合查询中的循环?_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

如何模拟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}]