2011-09-02 13 views
8

Bir koleksiyonda saklanan bazı belgeler var (urls olarak adlandırılır):Mongodb - alt belgeler için tuşların regex eşleşmesi

{ 
    payload:{ 
     url_google.com:{ 
      url:'google.com', 
      text:'search' 
     } 
    } 
}, 
{ 
    payload:{ 
     url_t.co:{ 
      url:'t.co', 
      text:'url shortener' 
     } 
    } 
}, 
{ 
    payload:{ 
     url_facebook.com:{ 
      url:'facebook.com', 
      text:'social network' 
     } 
    } 
} 

mongo CLI kullanarak /^url_/'nin /^url_/ ile eşleşen alt belgelerini aramak mümkün mü? Ve eğer mümkünse, eşleşmenin alt belgeleri üzerinde sorgulamak da mümkün olabilir (örneğin, text'in var olduğundan emin olun)?

Şunun gibi bir şey düşünüyordum:

db.urls.find({"payload":{"$regex":/^url_/}}).count(); 

Ancak bu, 0 sonuç döndürüyor.

Herhangi bir yardım veya öneri harika olur.

Teşekkürler,

Matt

cevap

5

Bu şekilde belge anahtarları karşı sorgulamak mümkün değildir. $exists kullanarak tam eşlemeleri arayabilirsiniz, ancak bir desen ile eşleşen anahtar isimleri bulamıyorsunuz.

URL alt belgesine sahip belgeleri bulmaya çalıştığınızı (ve belki de yanlış) ve tüm belgelerin buna sahip olmayacağını varsayalım? Bir seviyede aşağı o tür bilgileri itme Neden, bir benzeri:

{ 
    payload: { 
    type: "url", 
    url: "Facebook.com", 
    ... 
    } 
} 

Sonra sorgulamak olabilir gibi:

db.foo.find({"payload.type": "url", ...}) 

Sana noktalar kullanmaması gerektiğini unutmayın olmasaydı ben de dikkatsiz olurdu (.) MongoDB'deki anahtar isimlerdir. Bazı durumlarda, bu gibi belgeler oluşturmak mümkündür, ancak gömülü belgelere sorgulama girişiminde bulunduğunuzda büyük karışıklıklara neden olur (Mongo'nun konuştuğu nokta "bir yol ayırıcı" olarak kullanılır).

+0

Cevabınız için teşekkür ederiz. Ne yazık ki, koleksiyona eklenmiş olan belgelerin tasarımı üzerinde kontrol sahibi değilim:/ Ayrıca, gömülü belge dediğinizde ne demek istediğinizden emin değilim? Bir bağlantın var mı? Bu bir alt nesne ile aynı mı? –

+1

Sanırım bir "alt-nesne" dediğiniz ile aynı anlama geliyor. "Gömülü belge" daha veri merkezli bir terimdir, oysa "alt nesne" daha programlama merkezli bir terimdir (Mongo belgelerinin nesne hiyerarşisi olarak ifade edildiği diller için). Koleksiyonunuzdaki belgelerin yapısını değiştiremezseniz, daha fazla kullanılabilir bir biçime (burada önerdiğim gibi) yeniden yazmak için harita küçültmeyi kullanmayı düşünebilirsiniz. – dcrosta

+0

Serin, yardımlarınız için teşekkürler! –