3

ループバックで REST 公開オブジェクトの一部の代わりにスラッグ( )を使用したいStringObjectID

モデル ID に関するドキュメントの内容:

デフォルトでは、ID プロパティが定義されておらず、モデル オプションの idInjection が false の場合、LDL は次のようにモデルに id プロパティを自動的に追加します。

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

Stringタイプとして指定する必要があり、代わりにgenerated: falseループバックが生成されるのを回避する必要があると考えましたObjectId

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

--> これはまったく機能しませんでした

コードではmongodb.js、 my の名前が何であれ、値の損失を説明idする関数でラップされていることがわかります。ObjectIDString

補足: また、この generated プロパティは mongodb コネクタ コードでは使用されませんが、その目的は何ですか?

これまでの私の解決策

スキーマ定義のカスタム プロパティ ( objectId 、生成されたものがわからないため) を追加すると、次のようになります。

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()メソッドを同じ方法で更新したところ、スラッグを使用してオブジェクトを挿入/変更し、REST インターフェイスからもアクセスできるようになりました。

質問

これが正しいかどうかわかりませんが、何かが壊れますか?

また、依存関係を変更するという考えはあまり好きではないので、公式の方法を使用するか、StrongLoopの皆さんがこれを利用できると思われる場合はプル リクエストを作成することをお勧めします。

4

1 に答える 1

3

次の定義を使用できるはずです。

  1. クライアント側で文字列 ID を設定するには

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

また

  1. ObjectID を文字列として使用するには

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

LoopBack mongodb コネクタは、id タイプを尊重しようとします。文字列形式が ObjectID と一致する場合にのみ、ObjectID に変換されます。

1 つのバグが最近修正されましたが、まだリリースされていません。

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

気に入らない場合は、 https://groups.google.com/forum/# !forum/loopbackjsでお知らせください。

于 2014-02-18T23:54:53.300 に答える