2010-01-26 26 views
27

Gömülü belgelerin MongoDB'de nasıl filtreleneceğinin anlaşılmasında sorun yaşıyorum ve ilişkisel bir ilişki kullanmam gerektiğini düşünmeye başladım, ancak belge deposu bağlamında bu durum yanlış görünüyor.Gömülü belgelerin MongoDB'ye filtrelenmesi

Tipik bir blog/yorum sistemi ile yapıştırarak, bir blogs koleksiyonuna sahibiz ve her blog'un birçoğu comments. Yorumlar, blog belgesinin içinde gömülü belgeler olarak saklanır.

Benim blogs koleksiyonunu filtrelemek için çok basit, ama benim comments her blog gömülü filtrelemek amacıyla, I (Ruby diziye tümünü almak) belleğe hepsini yüklemek için yaşıyorum ve döngü her yorum yoluyla, belirli bir kritere uyan geri dönenler.

Noktalı gösterimi kullanarak gömülü belgeleri filtreleme çabaları başarısız oluyor ve tüm alt belgeleri geri getiriyor.

MongoDB'yi benim için filtrelemenin daha iyi bir yolu var mı, yoksa kendimi ilişkisel çağrışımlara bırakmalı mıyım? (Tüm gömülü belgeleri geri çekme ve el ile filtreleme, uzun vadede çok yoğun olacaktır)

cevap

22

Yerleşik dokümanları tanımladığınız şekilde filtrelemenin bir yolu yoktur. Nokta gösterimini kullanmak, gömülü bir dokümanda eşleştirmenize izin verir, ancak tüm belgenin, üst öğenin ve tümünün geri döndürülmesi gerekir. Ayrıca hangi alanların iade edileceğini seçmek de mümkündür, ancak bu da sizin durumunuza gerçekten yardımcı olmaz.

İstenen işlevselliği gerçekleştirecek bir "sanal koleksiyonlar" vakamız var; oylayabiliriz çekinmeyin:

http://jira.mongodb.org/browse/SERVER-142

arada, muhtemelen kendi topluluğu olarak yorumlarınızı davranmalısınız. Genel olarak, belirli bir veri seti ile kendi başınıza çalışmanız gerekiyorsa, onu bir koleksiyon haline getirin. Başka bir takımın parçası olarak daha iyi düşünülmüşse, gömmek daha iyidir.

+0

Teşekkürler kb - koleksiyon ile kendi gitti gitti, şu ana kadar çalışıyor gibi görünüyor; Sadece biraz test etmelisin. – kez

+0

Serin. Hala verimli olmalı. –

+13

"Sanal koleksiyonlar", bu çok ihtiyaç duyulan gereksinim için mükemmel bir overkill değil mi? Sadece merak ediyorum - ihtiyaç duyulmadığı için ya da karmaşık olduğundan, sadece belirli bir gömülü belgenin geliştirilmemesidir. – idophir