是否存在自动递增模型属性值的内置方法是Strongloop loopback?这个模型有一个名为orderNumber的属性,我希望它从1开始,每次创建一个新模型时递增1。此模型将持久保存到mongo DB。如果Strongloop loopback没有内置方式,那么使用javaScript,Node和mongoDB会被认为是最佳实践吗?
谢谢,
答案 0 :(得分:3)
好的,这个解决方案有效,但我绕过Loopback和" mongoDB连接器"。这就是我在做的事情。
给定一个名为Sequence的模型,如下所示:
{
"_id": {
"$oid": "54ab3ec0cc074e24144f26d7"
},
"collection": "SpecialOrder",
"value": 113
}
我这样做:
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
}
});
似乎应该有一个内置的LoopbackJS方式来做到这一点。要增加一个值,需要做很多事情。
谢谢,
沃伦贝尔答案 1 :(得分:2)
有同样的问题,但有Postgres。修复了仅使用更改列' id'手动在数据库中(将类型设置为SERIAL,这意味着在Postgres中自动增加)。我认为可以通过这种方式在任何数据库上解决问题。
答案 2 :(得分:2)
我想分享我的方法,这与作者的答案类似,但使用Loopback的方法。
以下是我创建的Sequence
模型:
{
"name": "sequence",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string",
"required": true
},
"value": {
"type": "number",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
您可以在此模型中存储任意数量的序列。然后我用这个脚本创建了一个我需要的序列(在这种情况下是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();
});
现在,每当我需要订单号来创建订单时,首先我会通过递增order
来更新Sequence
模型中的value
记录,然后再使用它:
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,
...
});
});
干杯!