2012-03-21 23 views

cevap

5

Burada, tam olarak istediğiniz şeyi yapan bir komut dosyası var.

Veritabanındaki tüm koleksiyonların bir listesini görüntüler (bu durumda 'dh' veritabanı). Kullanıcı, seçim koleksiyonunu yazıyor ve komut dosyası, belgeleri ve alanları 2 düzeyden aşağı gösterir. Doğrudan bir Mongo sorgusuna kopyalanabilen Mongo giriş formatında görüntülenir. Ayrıca, sözlüklerin listeleri için ilk seviye alanlarını kontrol edecek ve bu alt alanları, parantezler alanıyla çevrili listelerde gösterecektir. [Subfield_in_list] '.

toplama adının opsiyonel komut satırı girişi (örn piton/yol/komut/scriptname.py koleksiyon_adı da vardır

import pymongo 
from pymongo import Connection 

mon_con = Connection('localhost', 27017) 
mon_db = mon_con.dh 

cols = mon_db.collection_names() 
for c in cols: 
    print c 
col = raw_input('Input a collection from the list above to show its field names: ') 

collection = mon_db[col].find() 

keylist = [] 
for item in collection: 
    for key in item.keys(): 
     if key not in keylist: 
      keylist.append(key) 
     if isinstance(item[key], dict): 
      for subkey in item[key]: 
       subkey_annotated = key + "." + subkey 
       if subkey_annotated not in keylist: 
        keylist.append(subkey_annotated) 
        if isinstance(item[key][subkey], dict): 
         for subkey2 in item[subkey]: 
          subkey2_annotated = subkey_annotated + "." + subkey2 
          if subkey2_annotated not in keylist: 
           keylist.append(subkey2_annotated) 
     if isinstance(item[key], list): 
      for l in item[key]: 
       if isinstance(l, dict): 
        for lkey in l.keys(): 
         lkey_annotated = key + ".[" + lkey + "]" 
         if lkey_annotated not in keylist: 
          keylist.append(lkey_annotated) 
keylist.sort() 
for key in keylist: 
    keycnt = mon_db[col].find({key:{'$exists':1}}).count() 
    print "%-5d\t%s" % (keycnt, key) 

Sana kadar sonsuz seviyeleri aşağı yineleme için bir işlev yazabilirsiniz eminim orada hiçbir veri kaldı, ama bu hızlı ve kirli ve şimdi benim ihtiyaçlarına hizmet vermektedir.Ayrıca bir koleksiyonda belirli bir kayıt kümeleri için alanları göstermek için değiştirebilirsiniz.İyi yararlı bulmak umuyoruz

11

Bu çok Basit: , örn.

import pymongo 
import json 

if __name__ == '__main__': 
    client = pymongo.MongoClient("localhost", 27017, maxPoolSize=50) 
    d = dict((db, [collection for collection in client[db].collection_names()]) 
      for db in client.database_names()) 
    print json.dumps(d) 

sonuç -> { "database1": [ "collection1", "collection2" ...], "database2": [...], ...}, gibi:

{"test": ["score", "test4", "test5", "test6", "test3", "test7", "user", "test2", "test8"], 
"testdb": ["test5", "test8", "test2", "test9", "test3", "test4", "test6", "test"], 
"local": ["startup_log"], 
"stackoverflow": ["questions"]} 
2

Tüm koleksiyon adlarını MongoDB veritabanımdan almak için her zaman bu yolu kullandım.

import pymongo 
db_connect = pymongo.MongoClient('192.168.4.202', 20020) 
database_name = 'MY_DATABASE_NAME' 
database = db_connect[database_name] 
collection = database.collection_names(include_system_collections=False) 
for collect in collection: 
    print collect 
İlgili konular