Bạn cần tạo đối tượng có khóa biến thiên của mình một cách riêng biệt, vì JS trước ES2015 không cho phép bất kỳ thứ gì khác ngoài chuỗi hằng số trong cú pháp theo nghĩa đen của đối tượng:
var stuffID = 5
var stuff = {}; // create an empty object
stuff['stuff.' + stuffID] = 1; // and then populate the variable key
collection.update({
"id": id,
}, {
"$inc": stuff // pass the object from above here
}, ...);
CHỈNH SỬA trong ES2015, giờ đây có thể sử dụng một biểu thức làm khóa trong một đối tượng theo nghĩa đen, bằng cách sử dụng [expr]: value
cú pháp và trong trường hợp này cũng sử dụng phép nội suy chuỗi backtick ES2015:
var stuffID = 5;
collection.update({
"id": id,
}, {
"$inc": {
[`stuff.${stuffID}`]: 1
}
}, ...);
Đoạn mã trên hoạt động trong Node.js v4 +