我有以下猫鼬模式 -
const myTableSchema = new Schema({
Category: { type: String, required: false },
Tag: { type: String, required: false },
createdAt: { type: Date, 'default': Date.now },
updatedAt: { type: Date, 'default': Date.now },
});
请注意,它们都是字符串。我试图做一个像下面这样的查询——
localhost:1971/api/myTable?Category[$like]=Javascript
我在"类别"列中有带有 Javascript 的行。但是得到以下错误-
{
"name": "GeneralError",
"message": "Can't use $like with String.",
"code": 500,
"className": "general-error",
"data": {},
"errors": {}
}
我知道
自从讨论这个问题以来已经有一段时间了,但我有一个类似的问题,@Daff提供的代码对我有很大帮助,但它包含一个错误。
检查query[field].$like
是否存在,但随后query[field].$search
附加到最终查询。
正确的代码表示形式(如果遵循原始问题(应该是:
exports.searchRegex = function () {
return function (hook) {
const query = hook.params.query;
for (let field in query) {
if(query[field].$like && field.indexOf('$') == -1) {
query[field] = { $regex: new RegExp(query[field].$like) }
}
}
hook.params.query = query
return hook
}
}
MongoDB和Mongoose没有$like
运算符。实现搜索的常用方法(请参阅此常见问题解答(是添加一个钩子,将可搜索术语转换为MongoDB$regex查询,例如支持您正在寻找的$like
语法:
exports.searchRegex = function () {
return function (hook) {
const query = hook.params.query;
for (let field in query) {
if(query[field].$like && field.indexOf('$') == -1) {
query[field] = { $regex: new RegExp(query[field].$search) }
}
}
hook.params.query = query
return hook
}
}