使用数组时尝试在Mongoose查询中合并AND和OR操作

时间:2018-09-19 13:43:45

标签: mongodb mongoose mongodb-query mongoose-schema boolean-logic

我很难找到查询数据的正确方法。我现在可能对此问题太了解了,因为这是“难道这不容易吗?”之一。事情...

情况

我要查询的集合的对象结构如下:

{
    tags: [a, b, c],
    ...
}

请注意, a b c 是引用标记对象的ObjectId,它们依次如下:

{
    category: "X",
    descriptor: "Y"
}

问题

现在,用户可以从每个类别中选择一个以上的标签。并且取决于查询部分应该以不同的方式处理。为了说明:

用户选择A-1A-2B-1(使用符号category-descriptor),这意味着他们要查找匹配的对象(A-1 A-2 B-1;表示tags数组的可行内容是[A-1, B-1][A-2, B-1][A-1, A-2, B-1],仅此而已。 (编辑:仅查看查询的标签,[A-2, B-1, C-5]也是有效的)

当前版本太严格,只能找到完全匹配的内容,但下面举一个例子:

{ tags:
    { '$all': [ 'A-1', 'B-1' ]}
}

我摆弄了几种方法,用$all$in来组合相同类别标签的笛卡尔积和其他类别的笛卡尔积,但似乎遇到了障碍,目前正在质疑对象结构甚至允许我需要这种查询...


修改

再读几次后,显而易见的解决方案似乎是手动创建所有可行组合的列表,就像我在解释此问题时所做的那样(即[[A-1, B-1], [A-2, B-1], [A-1, A-2, B-1])。这似乎是不受欢迎的解决方案,因为类别的数量可能很大。

0 个答案:

没有答案