【问题标题】:How to imitate a loop inside mongodb aggregation query?如何在 mongodb 聚合查询中模拟循环?
【发布时间】: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


【解决方案1】:

假设类别的总数是有界的,请为每个类别写一个条件,并用 $or 连接。这可能很费力,但应该可以。

【讨论】:

  • 你能举个例子吗,我没看懂
猜你喜欢
  • 1970-01-01
  • 2020-09-10
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2021-07-03
相关资源
最近更新 更多