2012-11-18 8 views
19

Potrzebuję wstawić niektóre dane za pomocą mangusty, ale nazwa kolekcji jest dostarczana przez użytkownika w momencie wstawienia, więc najpierw muszę sprawdzić, czy kolekcja istnieje .Node.js - Mongoose - Sprawdź, czy istnieje zbiór

Sposób sprawdzania, czy kolekcja istnieje, to zapytanie do kolekcji system.namespaces. Widzę 3 możliwe podejścia do tego.

  1. Znajdź sposób na zapytanie system.namespaces za pomocą mangusty (może zdefiniowanie schematu, który pasuje do tego w db).
  2. Uzyskanie pewnego obiektu bazowego node-mongodb z mangusty i ręczne wykonanie zapytania. W każdym razie jest to coś, co chciałbym nauczyć się robić.
  3. Korzystanie osobną instancję węzła-MongoDB rodzimymi (lub jakiś inny sterownik), aby wykonać kwerendę

Ilość 3 jest przynajmniej jeden elegancki, a ja staram się unikać, nie wiem chcesz załadować kolejną instancję sterownika, ani utworzyć nowego połączenia, gdy już go stworzyłem.

Mam zamiar spróbować numer 1 po napisaniu tego. Właśnie sprawdziłem system.namespaces, a schemat wygląda na całkiem prosty.

Wciąż chciałbym usłyszeć pewne opinie.

Dzięki!

Odpowiedz

30

Opcja 2 jest prawdopodobnie najczystsza. Zakładając, że masz obiekt Mongoose o nazwie conn, który został otwarty przy użyciu mongoose.createConnection, możesz uzyskać dostęp do natywnego obiektu Mongo Db poprzez conn.db. Stamtąd można nazwać collectionNames który powinien zapewnić to, czego szukasz:

conn.db.collectionNames(function (err, names) { 
    // names contains an array of objects that contain the collection names 
}); 

Można również przekazać nazwę kolekcji jako parametr do collectionNames filtrować wyniki tylko to, czego szukasz.

Mongoose 4.x Aktualizacja

W wersji 2.x na MongoDB natywnego sterownika, który Mongoose 4.x używa collectionNames został zastąpiony przez listCollections który akceptuje filtr i zwraca kursor tak byś zrobić to jako:

mongoose.connection.db.listCollections({name: 'mycollectionname'}) 
    .next(function(err, collinfo) { 
     if (collinfo) { 
      // The collection exists 
     } 
    }); 
-6

Find kolekcję w liście kolekcji firmy

public function CollectionExists($collectionName) 
    { 
     $mongo = new Mongo(); 
     $collectionArr = $mongo->selectDB('yourrec')->listCollections(); 
     if (in_array($collectionName, $collectionArr)) { 
      return true; 
     } 
     return false; 
    } 
+1

Czy node.js, nie PHP; ( – Kino