【问题标题】:loopback-mongodb-connector modification to support slug idsloopback-mongodb-connector 修改以支持 slug id
【发布时间】:2014-03-18 23:58:43
【问题描述】:

我想对 Loopback

中的一些 REST 公开对象使用 slugs (String) 而不是 ObjectID

What the docs says about model ids:

默认情况下,如果没有定义id属性并且模型选项的idInjection为false,LDL会自动给模型添加id属性,如下:

id: {type: Number, generated: true, id: true}

我认为我只需要指定String 作为类型,并指定generated: false 以避免环回生成ObjectId

id: { type: String, generated: false, id: true },

--> 这根本不起作用

In the code, mongodb.js 我看到无论我的id 的名称是什么,它都被ObjectID 函数包裹,这解释了String 值的丢失。

旁注:另外, generated 属性,从未在 mongodb 连接器代码中使用过,它的用途是什么?

到目前为止我的解决方案

为我的模式定义添加一个自定义属性(objectId,因为我不确定 generated 的用途),它变成:

id: {
    type: String, 
    objectId: false, 
    id: true
},

然后我在MongoDB.prototype.create@mongodb.js:155 中使用以下属性:

var isObjectId = self.getDataSource(model)
                     .getModelDefinition(model)
                     .properties[idName]
                     .objectId;

if (idValue === null) {
    delete data[idName]; // Allow MongoDB to generate the id
} else {
    var oid = isObjectId ? ObjectID(idValue) : idValue; // Is it an Object ID?
    data._id = oid; // Set it to _id
    delete data[idName];
}

我以同样的方式更新了save() 方法,现在我可以使用 slug 插入/修改对象,也可以从 REST 接口访问它们。

问题

我不确定这是否正确,它会破坏什么吗?

另外,我不太喜欢修改依赖项的想法,所以我更喜欢使用官方方法,或者如果你们在 StrongLoop 认为可以使用这个。

【问题讨论】:

    标签: mongodb model slug strongloop loopbackjs


    【解决方案1】:

    您应该能够使用以下定义:

    1. 在客户端设置字符串id

      id: { type: String, generated: false, id: true }
      

    1. 使用 ObjectID 作为字符串

      id: { type: String, generated: true, id: true }
      

    LoopBack mongodb 连接器尝试遵守 id 类型。仅当字符串格式与 ObjectID 匹配时才会转换为 ObjectID。

    最近修复了一个错误,但尚未发布:

    https://github.com/strongloop/loopback-connector-mongodb/pull/15

    如果不适合您,请通过https://groups.google.com/forum/#!forum/loopbackjs 告诉我们。

    【讨论】:

    • 我更新到 1.1.5(从 1.1.4),它破坏了我的 slug-ready API!我并不感到惊讶,因为在create()save() 方法(mongodb.js)中,id 似乎都转换为ObjectID 无论如何,或者我错过了一些东西:) 为论坛获取, 下次我会在那里发帖。
    • 我的错,我没有看到 ObjectID 与 mongodb 函数不同,因此它并不总是返回 Object ID。我会尝试看看我的设置有什么问题。
    • 我明白了,创建/保存对象的更新/更新没有在数据中设置_id,让mongodb生成它。我发送了一个拉取请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多