2016-04-10 11 views
0

Burada konuyla ilgili sorular olsa da, döndürülen bir meteor mongo koleksiyon nesnesini filtrelemek için açık ve çok yönlü bir "en iyi uygulama" bulmaya henüz yetmedim.Tek bir iç içe geçmiş nesnenin mongo döndürülen nesneden süzülmesi/döndürülmesi (findOne)

(Bilginize: Ben MeteorJS kullanıyorum)

Bir yapılandırmaları koleksiyonundan bir yapılandırma belgesini çekti ettik. i activeServices diziden sadece bir nesneyi çekmek gerekir, bu belge/nesne döndürdü sonra

let thisConfig = ClinicConfigs.findOne({_id: "xyz"}); 

bu şu

{ 
    _id: "xyz", 
    name: "john doe's clinic", 
    activeServices: [ 
     { 
      name: "teeth whitening", 
      ref: "teethWhitening", 
      docs: [ 
       { 
        docId: "a", 
        name: "Client questionnaire", 
        ref: "clientQuestionnaire", 
       }, 
       { 
        docId: "b", 
        name: "Client consent form", 
        ref: "clientConsentForm", 
       } 
      ] 
     }, 
     { 
      name: "liposuction", 
      ref: "liposuction", 
      docs: [ 
       { 
        docId: "a", 
        name: "Client questionnaire", 
        ref: "clientQuestionnaire", 
       }, 
       { 
        docId: "b", 
        name: "Client consent form", 
        ref: "clientConsentForm", 
       } 
      ] 
     } 
    ]; 

döndü.

let thisService = ClinicConfigs.findOne({_id: "xyz"}) 
     .activeServices.findOne({ref: "teethWhitening"}); 

Aşağıdaki ancak herhangi bir başarı alamadım çalıştı:

let thisConfig = ClinicConfigs.findOne({_id: "xyz"}); 
let thisService = thisConfig.activeServices.filter(function(d) {return d.ref === "teethWhitening"})[0]; 

return thisService.docs; 

cevap

1

O çalıştığı ama bu işe yaramazsa rağmen

, burada ihtiyacım olanı netleştirmek için mantık var BuConfig veri nesnesini bir sondaki parantez ile düzeltmek zorunda kaldı. Bu yüzden

var thisCongig = { 
    _id: "xyz", 
    name: "john doe's clinic", 
    activeServices: [ 
     { 
      name: "teeth whitening", 
      ref: "teethWhitening", 
      docs: [ 
       { 
        docId: "a", 
        name: "Client questionnaire", 
        ref: "clientQuestionnaire", 
       }, 
       { 
        docId: "b", 
        name: "Client consent form", 
        ref: "clientConsentForm", 
       } 
      ] 
     }, 
     { 
      name: "liposuction", 
      ref: "liposuction", 
      docs: [ 
       { 
        docId: "a", 
        name: "Client questionnaire", 
        ref: "clientQuestionnaire", 
       }, 
       { 
        docId: "b", 
        name: "Client consent form", 
        ref: "clientConsentForm", 
       } 
      ] 
     } 
    ] 
}; 
var thisService = data.activeServices.find(d => d.ref == "teethWhitening"); 

gibidir Ve alındığında çalışması.

+1

Son yazım, soruyu yazarken bölümümde yazım hatası oldu. Çözümünüz izole çalışıyor ancak Meteor yardımcı işlevimde kullanıldığında değil. Bu bana bunun bir zamanlama sorunu olduğuna inanmamı sağlıyor. Yardımınız için teşekkürler, şimdi kullandığım fonksiyonları devre dışı bıraktım! – Aero

İlgili konular