2011-08-12 23 views
5

Czy istnieje sposób na użycie kluczy dynamicznych ze sterownikiem macierzystym-mongodb? Mam na myśli to, że mając zmienną przytrzymaj klucz zamiast bezpośrednio używać klucza.Czy istnieje sposób użycia klucza dynamicznego z węzłem-mongodb-native?

jak w przypadku należałoby normalnie to zrobić:

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

to zrobić w zamian:

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

Kiedy uruchomić ten drugi kod, ja skończyć z dokumentu w kolekcji db.col z kluczem o nazwie ID oprócz standardowo utworzonego _id, w przeciwieństwie do klucza _id o wartości wak3ajakar00. To prowadzi mnie do przekonania, że ​​nie jest to możliwe bezpośrednio.

Zamiast tego mam teraz tylko tworzenie dokumentu, który chcę wstawić z wyprzedzeniem, co następuje:

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

Działa to dokładnie tak, jak chcę go, ale ja po prostu chciałem wiedzieć, czy istnieją lepsze sposoby na rozwiązanie tego problemu. JavaScript, NodeJS i MongoDB są dla mnie zupełnie nowe, więc czuję, że mogłem łatwo coś przegapić. Jeśli nie, czy są jakieś czystsze sposoby napisania powyższego kodu w JavaScript?

najlepsze, a dzięki,
Sami

+0

Możliwy duplikat [Jak dodać właściwość do obiektu JavaScript przy użyciu zmiennej jako nazwy?] (Http://stackoverflow.com/questions/695050/how-do-i-add-a-property- to-a-javascript-object-using-a-variable-as-the-name) –

Odpowiedz

9

W dosłownym składni obiektu, nie można użyć zmiennej jako nazwę klucza, tylko wartości. Sposób, w jaki to robisz, to sposób, który już odkryłeś - najpierw utwórz obiekt, a następnie dodaj właściwość jako osobny krok, korzystając z notacji nawias kwadratowych.

var obj = {}; 
var ID = "_id"; 
obj[ID] = "wak3ajakar00"; 
2

Możesz napisać mały funkcję, która tworzy taki obiekt

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'} 

nie wiem, czy wywołanie tej funkcji obj jest dobrym pomysłem.

Powiązane problemy