переменная с точечной нотацией mongodb - PullRequest
8 голосов
/ 15 июля 2011

Я хочу увеличить поле внутри объектного объекта внутри документа mongodb на 1.

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

Мне нужно сделать этот stuffID переменной.Есть ли способ сделать это?Спасибо.

Это использует node-mongodb-native, если это помогает.

Если вы голосуете за закрытие, вы можете объяснить, что вы не понимаете?

Ответы [ 2 ]

13 голосов
/ 15 июля 2011

Вам необходимо создать объект с переменным ключом отдельно, потому что JS до ES2015 не разрешает ничего, кроме константных строк в синтаксисе литерала объекта:

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 в ES2015, теперь можно использовать выражение в качестве ключа в литерале объекта, используя синтаксис [expr]: value, и в этом случае также используя интерполяцию обратной строки ES2015:

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

Код выше работает в Node.js v4 +

0 голосов
/ 15 июля 2011

Поместите переменную, где написано stuffID.

'stuff.' + varname: 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...