Oto (prawdopodobnie) lepszy mini-samouczek, jak dostać się bezpośrednio do wnętrza MongoDB. To może nie rozwiązać konkretnego problemu, ale powinno doprowadzić Cię do wersji MongoDB tabeli SELECT * FROM table
.
Przede wszystkim będziesz chciał Mongo::Connection
obiekt. Jeśli używasz MongoMappera, możesz wywołać connection
metoda klasy na dowolnym modelu MongoMappera, aby uzyskać połączenie lub poproś o to MongoMappera bezpośrednio:
connection = YourMongoModel.connection
connection = MongoMapper.connection
W przeciwnym razie użyjesz from_uri
konstruktora do zbudowania własnego połączenia.
Następnie musisz zdobyć bazę danych, możesz to zrobić za pomocą notacji dostępu do tablicy, db
lub pobierz aktualną bezpośrednio z MongoMappera:
db = connection['database_name'] # This does not support options.
db = connection.db('database_name') # This does support options.
db = MongoMapper.database # This should be configured like
# the rest of your app.
Teraz masz ładne, błyszczące Mongo::DB
instancja w twoich rękach. Ale prawdopodobnie chcesz Collection
zrobić coś interesującego i możesz to uzyskać za pomocą notacji dostępu do tablicy lub collection
metoda:
collection = db['collection_name']
collection = db.collection('collection_name')
Teraz masz coś, co zachowuje się jak tabela SQL, więc możesz count
ile ma rzeczy lub zapytaj za pomocą find
:
cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])
# etc.
A teraz masz to, czego naprawdę szukasz:gorąca z piekarnika Mongo::Cursor
który wskazuje na dane, które Cię interesują. Mongo::Cursor
isan Enumerable
więc masz dostęp do wszystkich swoich zwykłych znajomych iterujących, takich jak each
, first
, map
i jeden z moich osobistych ulubionych, each_with_object
:
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Istnieje również command
i eval
metody na Mongo::DB
które mogą zrobić to, co chcesz.