Loopback 3 updateAll 过滤器不工作

Loopback 3 updateAll filter is not working

我在 Loopback 3 中有以下模型:

    {
      "name": "rehearsalTest",
      "base": "PersistedModel",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "creationDate": {
          "type": "date"
        },
        "userId": {
          "type": "string",
          "required": true
        },
        "courseId": {
          "type": "string",
          "required": true
        },
        "templateId": {
          "type": "string",
          "required": true
        },
        "testId": {
          "type": "string",
          "required": true
        },
        "grade": {
          "type": "string",
          "required": false
        }
      },
      "validations": [],
      "relations": {},
      "acls": [
        {
          "accessType": "*",
          "principalType": "ROLE",
          "principalId": "$unauthenticated",
          "permission": "DENY"
        },
        {
          "accessType": "*",
          "principalType": "ROLE",
          "principalId": "$authenticated",
          "permission": "ALLOW"
        }
      ],
      "methods": {}
    }

看起来很简单,我在Mongo中的数据是这样显示的:

我只想更新已创建行中的成绩,按 testId 过滤。我已经这样做了很多次,但是这个不起作用,原因我似乎无法理解。

首先我尝试了:

await RehearsalTest.updateAll({testId: testId}, {grade: grade}, (err, data) => { 
  console.log('rehearsalTest.updateAll', err, data);
});

这 return 是 {count: 0}

所以我尝试了 like,因为有时它会起作用:

await RehearsalTest.updateAll({testId: {like: testId}}, {grade: grade}, (err, data) => { 
  console.log('rehearsalTest.updateAll', err, data);
});

抛出这个异常:

Error: The testId property has invalid clause {"like":"60afbc93f30a9f7807fc95d1"}: Expected a string or RegExp

有趣的是,如果我转到环回浏览器和过滤器,它会完美运行:

我也尝试使用 findfindOne,但没有成功。如果没有 like 子句,它不会 return 任何东西,或者它 return 是上面显示的异常。

有什么想法吗?我将永远感激不已。

编辑 数据库中的字符串似乎与我正在比较的字符串不完全相同。但我还没有发现到底发生了什么。这个console.log:

console.log(`"${rehearsalTest.testId}"`, `"${testId}"`,
          `${rehearsalTest.testId}`, `${testId}`,        
          `"${rehearsalTest.testId}"` === `"${testId}"`,
          `${rehearsalTest.testId}` === `${testId}`,
          rehearsalTest.testId === testId,
          rehearsalTest.testId == testId,
          );          

returns:

"60b652d4e31a1d54e086570d" "60b652d4e31a1d54e086570d" 60b652d4e31a1d54e086570d 60b652d4e31a1d54e086570d 
true true false true

所以很明显有些东西使这两个字符串不完全相等,但现在我真的看不出 什么

所以问题是我的函数直接从对象 test 接收 testId,如 test.id

这个 id,即使它在 console.log 中显示为 string,但在内部它是一个对象,因此无法正确比较。

当我将 test.id 更改为 "${test.id}" 时,一切正常。

我要自杀了,谢谢。