即使给出了两个表达式,也会得到“ MongoError:$ or必须是数组”吗?

时间:2019-09-06 20:16:53

标签: mongodb mongodb-query

这是用于地图的,这样搜索“ fullName”将返回所有输入为fullName或AlternativeName的文档。这两个查询都是单独工作的,但是当放在$ or运算符中时,它表示$ or需要一个数组。仅当还添加了$ not运算符时,这种情况才会发生。

我认为,当搜索被标记为否定并且应用了$ not运算符时,它会将其中一个表达式解释为null,因此它不被读取为数组?

searchMap对象的一部分:

fullName: (d, exact) => ({
        $or: [
            { fullName: getRegExp(d, exact) },
            { alternateNames: { $elemMatch: { alternateName: getRegExp(d, exact) } } },
        ]
    }),

仅当我们将搜索标记为“否定”时,这种情况才会发生:

if (queryItem.negative === true && queryItem._id !== "entry") {
                        for (let key in item) {
                            item[key] = { $not: item[key] };
                        }
                    }
...

理想情况下,否定搜索将返回所有输入都不是fullName或AlternativeName的文档。

1 个答案:

答案 0 :(得分:0)

当item [key]是一个数组时发生错误。通过将键从$ or更改为$ nor来解决。