9

I want to increase a field inside an object object inside a mongodb document by 1.

  var stuffID = 5
  collection.update({
    "id": id,
  },
  {
    '$inc': {
      'stuff.stuffID': 1
    }
  },
  function(err, doc) {
    res.end('done');
  });

I need to make that stuffID a variable. Any way to do that? Thanks.

This is using node-mongodb-native if that helps.

If you're voting to close can you explain what it is you don't understand?

2
  • In what sense do you want to "make that stuffID a variable"? Commented Jul 15, 2011 at 6:43
  • @cwb like if stuffID is actually a different value and not the string stuffID. Commented Jul 15, 2011 at 6:49

2 Answers 2

18

You need to create your variably-keyed object separately, because JS before ES2015 doesn't permit anything other than constant strings in object literal syntax:

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

EDIT in ES2015, it's now possible to use an expression as a key in an object literal, using [expr]: value syntax, and in this case also using ES2015 backtick string interpolation:

var stuffID = 5;
collection.update({
    "id": id,
}, {
    "$inc": {
        [`stuff.${stuffID}`]: 1
    }
}, ...);

The code above works in Node.js v4+

Sign up to request clarification or add additional context in comments.

Comments

-3

Put the variable where it says stuffID.

'stuff.' + varname: 1

4 Comments

` 'stuff.' + stuffID: 1 ^ module.js:301 throw err; ^ SyntaxError: Unexpected token + `
I don't think you can put a + in a key?
Then put the 'stuff.' in the variable too and you won't have to concatenate.
Well therein lies the rub, the variable is going to be interpreted as the field name and you're going to end up with varname : 1 in your document.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.