Rob*_*ans 10 mongodb loopbackjs
我有一个具有许多属性的模型.其中一个是名为"developerId"的字段,它包含一个与MongoDB ObjectId具有相同长度和特征的字符串(它实际上是一个字符串化的ObjectId).
当我使用Node.js中的find()方法查询模型时,查询在执行之前会更新,并且"developerId"值将转换为ObjectId,然后无法匹配数据库中的任何字符串,因为它们是字符串,而不是的ObjectID.
{where: {developerId: '55118c5fc921fa170f05080b'}}
Run Code Online (Sandbox Code Playgroud)
转换为:
{where: {developerId: ObjectId('55118c5fc921fa170f05080b')}}
Run Code Online (Sandbox Code Playgroud)
该字段不是id字段,在模型json定义中指定为类型:'string'.
如何关闭此auto-object-id行为以便控制Loopback的查询?
现在,您可以在模型定义 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
},
...
}
Run Code Online (Sandbox Code Playgroud)
看起来您已经发现了框架的错误/缺点。看这里:
https://github.com/strongloop/loopback-connector-mongodb/issues/52
截至两个月前,该错误似乎仍未解决。欢迎来到可以作为节点开发的狂野西部。
您可以在短期内分叉和破解该模块,同时与社区合作解决此问题。
您还可以尝试使用底层 mongo 连接进行查询,然后将其映射回环回对象。你可以这样得到:
app.models.User.dataSource.connector
Run Code Online (Sandbox Code Playgroud)
我想您始终可以将模型的developerId 字段更改为实际的ObjectId。
归档时间: |
|
查看次数: |
5777 次 |
最近记录: |