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.
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
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
bạn có biết cách "** inStock **" làm thông số không? –