2011-01-13 18 views
26

Znalazłem kolekcję w jednej z naszych baz danych MongoDB o nazwie my.collection.MongoDB Shell - kolekcja dostępu z kropką w nazwie?

Czy istnieje sposób dostępu do tej kolekcji z powłoki MongoDB, mimo że ma ona punkt w nazwie?

> db.my.collection.findOne(); 
null 

Jestem prawie pewien, że to nie jest poprawne.

+0

to działa na mapę/zmniejszenia gromadzenia które mają kropkę w nazwie, np 'tmp.mr.mapreduce_1294927200_2363' – Nekresh

Odpowiedz

2

Twój kod jest poprawny. Jeśli zwróci wartość null, oznacza to, że kolekcja jest pusta.

+0

Z podobnym problemem znalazłem powłokę Mongo, podając błąd" SyntaxError: nieoczekiwany token ILLEGAL "... Znalazłem odpowiedź Laury poniżej, która jest sposobem na uzyskanie dostępu do kolekcji z kropką w nazwie. – Kickaha

76

spróbować zamiast:

db["my.collection"].findOne(); 

napotkasz ten sam problem z myślnikami lub jakiejkolwiek innej nazwy, która nie zgadza się na [a-zA-Z _ $] [0-9a-zA-Z_ $ ]

To ograniczenie pochodzi z poprawnych nazwanych właściwości obiektów javascript.

+5

Wierzę, że to powinna być zaakceptowana odpowiedź, ponieważ wyjaśnia składnię i podaje użyteczne obejście. – jschreiner

+0

zgadzam się, to powinna być zaakceptowana odpowiedź. – rabashani

10

jeśli nazwa kolekcji jest "my.collection"

db.my.collection.findOne(); // OK
null

jeśli nazwa kolekcji jest "my.1.collection"

db.my.1.collection.findOne(); // Not OK
SyntaxError: missing ; before statement

Fix:

db["my.1.collection"].findOne(); // Now is OK
null

5

Kolejny niezawodny sposób jest:

db.getCollection("_SCHEMA").find() 

O ile w przypadku podkreślenia w nazwie, wciąż powodować błąd z @Laura odpowiedź:

> db["_SCHEMA"].find() 
2016-07-18T17:44:16.948+0200 E QUERY [thread1] TypeError: db._SCHEMA is undefined : 
@(shell):1:1 
+0

To powinna być odpowiedź. Nic innego nie działało dla kolekcji o nazwie "1" w powłoce. – pferrel

Powiązane problemy