2015-01-02 18 views
7

Có cách tích hợp để tự động tăng giá trị thuộc tính của mô hình là vòng lặp Strongloop không? Mô hình này có một thuộc tính có tên orderNumber và tôi muốn nó bắt đầu ở mức 1 và tăng thêm 1 mỗi lần một mô hình mới được tạo ra. Mô hình này được duy trì cho một DB mongo. Nếu vòng lặp Strongloop không có cách xây dựng, thì điều gì sẽ được coi là thực hành tốt nhất khi sử dụng javaScript, Node và mongoDB?Tự động tăng giá trị thuộc tính trong mô hình vòng lặp Strongloop

Cảm ơn,

+0

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

+0

Cảm ơn @Brian, Điều đó khiến tôi bắt đầu đi đúng hướng. – Warren

Trả lời

3

Ok, giải pháp này hoạt động nhưng tôi bỏ qua Loopback và "kết nối MongoDB". Đây là những gì tôi đang làm.

Cho một mô hình tên Chuỗi trông như thế này:

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

tôi đang làm điều này:

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 
     } 
    }); 

Có vẻ như không nên được tích hợp sẵn trong LoopbackJS cách để làm điều này. Rất nhiều thứ phải trải qua chỉ để tăng giá trị.

Cảm ơn,

Warren Chuông

1

có cùng một vấn đề, nhưng với Postgres. Cố định chỉ bằng cách sử dụng thay đổi cột 'id' theo cách thủ công trong cơ sở dữ liệu (đặt loại thành SERIAL có nghĩa là tự động tăng trong Postgres). Tôi nghĩ rằng vấn đề có thể được giải quyết theo cách này trên bất kỳ cơ sở dữ liệu nào.

1

Tôi muốn chia sẻ phương pháp tiếp cận của mình, tương tự như câu trả lời của tác giả, nhưng bằng cách sử dụng các phương pháp của Loopback. Dưới đây là mô hình Sequence Tôi đã tạo:

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

Bạn có thể lưu trữ như nhiều trình tự như bạn muốn trong mô hình này. Sau đó, tôi tạo ra một chuỗi tôi cần với kịch bản này (trong trường hợp này order chuỗi):

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(); 
}); 

Bây giờ mỗi khi cần số để tạo ra một trật tự, đầu tiên tôi cập nhật các bản ghi order trong Sequence mô hình bằng cách tăng nó value và sau đó sử dụng nó:

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, 
    ... 
    }); 
}); 

Chúc mừng!

Các vấn đề liên quan