Есть ли способ использовать динамический ключ с node-mongodb-native? - PullRequest
5 голосов
/ 13 августа 2011

Есть ли способ использовать динамические ключи с драйвером node-mongodb-native? Под этим я подразумеваю, чтобы переменная удерживала ключ вместо непосредственного использования ключа.

Как и в случае, когда обычно это делают:

db.createCollection('col', function(err, col){
    col.insert({'_id':'wak3ajakar00'});
}

сделать это вместо:

db.createCollection('col', function(err, col){
    var ID = '_id';
    col.insert({ID:'wak3ajakar00'});
}

Когда я запускаю последний код, я получаю документ в коллекции db.col с ключом ID в дополнение к стандартно созданному _id, а не просто ключ _id со значением wak3ajakar00. Это заставляет меня поверить, что на самом деле это невозможно сделать напрямую.

Вместо этого я сейчас просто создаю документ, который хочу вставить заранее, следующим образом:

db.createCollection('col', function(err, col){
    var ID = 'wak3ajakar00';
    var key = '_id';
    insertion = {}
    insertion[key] = ID;
    col.insert(insertion);
}

Это работает точно так, как я хочу, но я просто хотел знать, есть ли лучшие способы сделать это. JavaScript, NodeJS и MongoDB являются новыми для меня, поэтому я чувствую, что могу что-то упустить. Если нет, есть ли более понятные способы написания кода выше на JavaScript?

С наилучшими пожеланиями,
Сами

Ответы [ 2 ]

9 голосов
/ 13 августа 2011

В буквальном синтаксисе объекта нельзя использовать переменную в качестве имени ключа, только значения. Способ сделать это, это способ, который вы уже обнаружили - сначала создайте свой объект, а затем добавьте свойство в качестве отдельного шага, используя обозначение в квадратных скобках.

var obj = {};
var ID = "_id";
obj[ID] = "wak3ajakar00";
2 голосов
/ 11 апреля 2013

Вы можете написать небольшую функцию, которая создает такой объект

var obj = function(key, value, obj) {
  obj = obj || {};
  obj[key] = value;
  return obj;
}

// Usage
foo = obj('foo' + 'bar', 'baz');
// -> {'foobar': 'baz'}

foo = obj('stack' + 'over', 'flow', foo);
// -> {'foobar': 'baz', 'stackover': 'flow'}

Не знаю, если вызов этой функции obj хорошая идея.

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