2012-02-05 40 views
7

Tôi đang cố gắng tăng giá trị trong một bộ sưu tập trong cơ sở dữ liệu MongoDB của tôi thông qua Mongoose. Đây là mã bản demo hiển thị trên trang web của Mongoose:Tăng một trường trong bộ sưu tập MongoDB với Mongoose

var conditions = { name: 'borne' } 
    , update = { $inc: { visits: 1 }} 
    , options = { multi: true }; 

Model.update(conditions, update, options, callback) 

Và tôi có một cái gì đó như thế này:

var conditions = { "uniqueId" : itemId }; 
var update; 
if(increase) 
    update = {$inc : {inStock : 1}}; 
else 
    update = {$dec : {inStock : 1}}; 
Item.update(conditions, update, {}, callback); 

Như bạn có thể thấy không có nhiều sự khác biệt từ mã trang web của Mongoose.

Vấn đề là khi đoạn mã này được thực hiện, tôi sẽ có trong một bộ sưu tập của tôi một trường gọi là $dec (hoặc $inc) có một đối tượng dưới dạng một trường ở dạng {inStock : 1}. Tôi chỉ muốn tăng mục nhập inStock của bộ sưu tập. Trong lược đồ tôi có:

var ItemToSell = new Schema({ 
    uniqueId : { type: Number, index: true } 
    , name  : String 
    , type  : String 
    , inStock : Number 
}); 

Có ai có thể chỉ ra tôi đang làm gì sai? Cảm ơn rất nhiều.

Trả lời

3

A) Đảm bảo bạn là Mongoose được cập nhật. Các phiên bản cũ hơn rất lỗi trên các hoạt động Model.update vì Mongoose cố gắng suy ra khi bạn chỉ truyền một đối tượng mới, trong trường hợp này biến đối tượng update của bạn thành hoạt động $set.

B) Thử xóa số trống {} khỏi cuộc gọi hàm của bạn. Nó là tùy chọn, và bằng cách truyền một đối tượng trống thay vì các tùy chọn thực tế, bạn có thể khó hiểu Mongoose trong việc thiết lập tùy chọn { safe: false }, điều này cũng có thể gây ra vấn đề của bạn. Tôi đã không kiểm tra mã nguồn để xác nhận rằng đó có thể là vấn đề, nhưng nó có thể đáng để thử.

+0

Cảm ơn bạn đã trả lời. Bằng cách xóa bỏ '{}' trống, tôi đã giải quyết vấn đề gây ra '{" $ dec ": {" inStock ": 1}}' để được thêm vào bộ sưu tập. Bạn đã đúng với thực tế là tôi đã sử dụng một phiên bản cũ của Mongoose NHƯNG vẫn còn tôi đã không giải quyết vấn đề. Bây giờ có vẻ như nó không làm gì cả với bộ sưu tập. – Masiar

+4

Ok Tôi đã giải quyết được vấn đề. Đầu vào 'err' của hàm gọi lại đã đưa ra một thứ gì đó mà tôi cập nhật phiên bản Mongoose của mình. Tôi phát hiện ra rằng '$ dec' không tồn tại, do đó để giảm tôi phải nhập một số âm (' {$ inc: {inStock: -1}} '). Cảm ơn bạn đã thử mặc dù nó đã giúp rất nhiều! – Masiar

+0

bạn có biết cách "** inStock **" làm thông số không? –

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