簡體   English   中英

Feathers-mongoose $like 查詢 MongoDb 出現錯誤

[英]Feathers-mongoose $like query for MongoDb getting Error

我有以下 Mongoose 架構 -

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 },
});

請注意,它們都是 String。 我正在嘗試進行如下查詢 -

localhost:1971/api/myTable?Category[$like]=Javascript

我在類別列中有 Javascript 行。 但是出現以下錯誤-

{
  "name": "GeneralError",
  "message": "Can't use $like with String.",
  "code": 500,
  "className": "general-error",
  "data": {},
  "errors": {}
}

MongoDB和Mongoose沒有$like運算符。 實施搜索的常見方法(請參閱FAQ )是添加一個鈎子 ,該鈎子將可搜索的詞轉換為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
  }
}

我知道討論這個問題已經有一段時間了,但我有一個類似的問題,@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
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM