2015-01-02 6 views
7

モデルのプロパティ値を自動的にインクリメントする組み込み方法はStrongloopループバックですか?このモデルにはorderNumberという名前のプロパティがあり、新しいモデルを作成するたびに1から始まり1ずつ増分します。このモデルはmongo DBに保存されています。 Strongloopのループバックに組み込みの方法がない場合、javaScript、Node、およびmongoDBを使用するとベストプラクティスと見なされるでしょうか?Strongloopループバックモデルのプロパティ値を自動的にインクリメント

おかげで、

+0

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/ – Brian

+0

@Brianさん、ありがとうございました。 – Warren

答えて

3

OK]をクリックして、このソリューションは動作しますが、私はループバックと "MongoDBのコネクタ" を迂回しています。ここに私がやっていることがあります。

は、次のようになりますモデルという名前のシーケンスを考える:私はこれをやっている

{ 
    "_id": { 
     "$oid": "54ab3ec0cc074e24144f26d7" 
    }, 
    "collection": "SpecialOrder", 
    "value": 113 
} 

を:これを行うのLoopbackJSの方法でそこに構築する必要がありますように

mongoConnector = app.dataSources.MyMongoDBConnectorName.connector; 

mongoConnector.collection("Sequence").findAndModify({collection: 'SpecialOrder'}, [['_id','asc']], {$inc: { value: 1 }}, {new: true}, function(err, sequence) { 
     if(err) { 
      console.log(err.message); 
     } else { 
      // Do what I need to do with new incremented value sequence.value 
     } 
    }); 

は思えます。値を増やすために多くのことが行われます。

おかげで、

ウォーレン・ベル

1

はなく、Postgresのと、同じ問題を抱えています。データベースで列 'id'を手動で変更するだけで修正されました(タイプをSERIALに設定すると、Postgresの自動インクリメントを意味します)。私は問題がこの方法でどのデータベースでも解決できると思います。

1

著者の回答に似ていますが、ループバックの方法を使用して私のアプローチを共有したいと思います。あなたはこのモデルに必要な数のシーケンスを記憶することができます

{ 
    "name": "sequence", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "name": { 
     "type": "string", 
     "required": true 
    }, 
    "value": { 
     "type": "number", 
     "required": true 
    } 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": [] 
} 

: は、ここで私が作成したSequenceモデルです。それから私は、私は、このスクリプト(この場合はorderシーケンス)で必要なシーケンスを作成します。

var app = require('./server/server'); 

var Sequence = app.models.Sequence; 

Sequence.findOrCreate({ 
    where: { 
    name: 'order' 
    } 
}, { 
    name: 'order', 
    value: 0 
}, function (err) { 
    if (err) { 
    console.log(err); 
    } 
    process.exit(); 
}); 

は今、毎回私が最初に私がそのvalueを増分することによってSequenceモデルでorderレコードを更新、オーダーを作成するために、注文番号が必要とそれを使用してください:

var Sequence = Order.app.models.Sequence; 

Sequence.findOne({ 
    where: { 
    name: 'order' 
    } 
}) 
.then(function (orderNumber) { 
    orderNumber.value++; 
    return orderNumber.save(); 
}) 
.then(function (orderNumber) { 
    Order.upsert({ 
    orderNumber: orderNumber.value, 
    ... 
    }); 
}); 

乾杯!

関連する問題