使用查找Where子句

时间:2015-07-04 11:37:58

标签: mongodb loopbackjs

我有一个包含许多属性的模型。其中一个是名为“developerId”的字段,其中包含一个与MongoDB ObjectId具有相同长度和特征的字符串(实际上它是一个字符串化的ObjectId)。

当我在Node.js中使用find()方法查询模型时,查询会在执行之前更新,并且“developerId”值将转换为ObjectId,然后无法匹配数据库中的任何字符串,因为它们是字符串,而不是ObjectIds。

{where: {developerId: '55118c5fc921fa170f05080b'}}

转换为:

{where: {developerId: ObjectId('55118c5fc921fa170f05080b')}}

该字段不是id字段,在模型json定义中指定为类型:'string'。

如何关闭此auto-object-id行为,以便控制Loopback的查询?

3 个答案:

答案 0 :(得分:4)

看起来你已经发现了框架的错误/缺点。见这里:

https://github.com/strongloop/loopback-connector-mongodb/issues/52

两个月前,该漏洞似乎仍未得到解决。欢迎来到可以节点开发的狂野西部。

您可以在短期内分叉和破解模块,同时与社区合作解决此问题。

您也可以尝试使用底层的mongo连接进行查询,然后将其映射回您的环回对象。你可以这样做:

app.models.User.dataSource.connector

我想您总是可以将您的模型的developerId字段更改为实际的ObjectId。

答案 1 :(得分:2)

现在可以在模型定义json文件中将strictObjectIDCoercion标志设置为true,以避免将类似id的字符串强制转换为ObjectID类型。

文档:https://github.com/strongloop/loopback-connector-mongodb#strictobjectidcoercion-flag

以下是文档中的示例:

{
  "name": "myModelName",
  "base": "PersistedModel",
  "idInjection": false,
  "options": {
    "validateUpsert": true,
    "strictObjectIDCoercion": true
  },
...
}

答案 2 :(得分:0)

确保在您的Json文件中将developerId属性定义为object 样品:

"Properties" {
...
    "developerId": {
      "type": {
        "required": true
      }
    }
...
}