Mongoose Array İçinde Arama

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    biri
    biri's avatar
    Kayıt Tarihi: 03/Ocak/2009
    Erkek

    Merhabalar,

    Node.js ile bir yerde takıldım.

    Mongo veritabanında isime göre veri alıyorum. Her verinin içinde de array olarak notlar var. İsteğim notlar içinde onay: false olanlar gösterilmesin.

    Örnek olarak;

    { 
        isim:"ahmet",
        soyisim: "mehmet",
        notlar:[
           {onay: false, yer:'istanbul'},
           {onay: true, yer:'bursa'},
           {onay: false, yer: 'ankara'},
        ]
    }

    Mongoose ile Kullanicilar.findOne({isim: 'ahmet'}) diye çektiğimde nasıl bir kod daha yazmalıyım ki notlar içindeki array da sadece bursa dönsün.


    ¯\(ツ)/¯ ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tahta
    tahta's avatar
    Kayıt Tarihi: 05/Mayıs/2008
    Erkek

    Çok fazla hakim olmamakla birlikte belki yardımcı olur düşüncesiyle fikir yürütüyorum.

    İsme göre veriyi çekip yeni bir liste yapıp onun da içinde .map() işlemi uygulasak onu da yeni list ya da array a koysak iş görmez mi?

     

    Kullanicilar.findOne({isim: 'ahmet'}) 

    newAhmet = {

    isim:"",
        soyisim: "",
        notlar:[]

    }

    ahmet.notlar.map(onay=>{

    if(onay == true){

    newAhmet.isim = ahmet.isim

    newAhmet.soyisim = ahmet.soyisim

    ahmet.notlar.push(onay)

    }

    })

     

    Gibi bir yöntem nasıl olur.

    NOT: Kodlar muhtemelen yanlış sadece fikir vermesi açısından bildiğim kadar yazdım

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo

    direkt notlar.yer diye aratabilirsin

    {$and: [{isim:"ahmet"}, {"notlar.yer":"istanbul"}]}

     


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tahta
    tahta's avatar
    Kayıt Tarihi: 05/Mayıs/2008
    Erkek

    Hocam benim anladığım Ahmeti aramak bulmak istiyor ama ekranda adresler kısmında sadece "TRUE" olanlar yazsın istiyor. Örneğin adamın şuanki ikamet adresi bursa ve ben ekranda güncel olan bursayı göreyim istanbul ve ankara görünmesin. Sanırım böyle birşey istiyor.

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    tahta bunu yazdı

    Hocam benim anladığım Ahmeti aramak bulmak istiyor ama ekranda adresler kısmında sadece "TRUE" olanlar yazsın istiyor. Örneğin adamın şuanki ikamet adresi bursa ve ben ekranda güncel olan bursayı göreyim istanbul ve ankara görünmesin. Sanırım böyle birşey istiyor.

    project kısmında sorgu veremiyosun mongoda. buysa istedigi aggregationla yapilabilir, $unwind edip çıkan şeye match yapacaksin falan.

    ama bence dokümanlar çok büyük değilse gerek yok onun yerine javascript tarafında zaten ihtiyacın olmayanı kullanmazsın

    şöyle bişeyle filtrelenebilir: 

    var notlar = result.notlar
    var arananSehir = "istanbul"
    var istanbulNotlar = notlar.filter(function(e){
    return e.yer == arananSehir
    })



     


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    tahta
    tahta's avatar
    Kayıt Tarihi: 05/Mayıs/2008
    Erkek

    Hocam bu konuda birşey diyemeyeceğim benim bilgim burada bitti :))

     

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    biri
    biri's avatar
    Kayıt Tarihi: 03/Ocak/2009
    Erkek
    tahta bunu yazdı

    Hocam benim anladığım Ahmeti aramak bulmak istiyor ama ekranda adresler kısmında sadece "TRUE" olanlar yazsın istiyor. Örneğin adamın şuanki ikamet adresi bursa ve ben ekranda güncel olan bursayı göreyim istanbul ve ankara görünmesin. Sanırım böyle birşey istiyor.

    Evet, tam olarak bu.

    Notlar kısmında da dokümanlar büyük olduğu icin direkt sorguda azaltmam gerekiyor.


    ¯\(ツ)/¯ ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    biri
    biri's avatar
    Kayıt Tarihi: 03/Ocak/2009
    Erkek
    yolbulucu bunu yazdı
    tahta bunu yazdı

    Hocam benim anladığım Ahmeti aramak bulmak istiyor ama ekranda adresler kısmında sadece "TRUE" olanlar yazsın istiyor. Örneğin adamın şuanki ikamet adresi bursa ve ben ekranda güncel olan bursayı göreyim istanbul ve ankara görünmesin. Sanırım böyle birşey istiyor.

    project kısmında sorgu veremiyosun mongoda. buysa istedigi aggregationla yapilabilir, $unwind edip çıkan şeye match yapacaksin falan.

    ama bence dokümanlar çok büyük değilse gerek yok onun yerine javascript tarafında zaten ihtiyacın olmayanı kullanmazsın

    şöyle bişeyle filtrelenebilir: 

    var notlar = result.notlar
    var arananSehir = "istanbul"
    var istanbulNotlar = notlar.filter(function(e){
    return e.yer == arananSehir
    })



     

    {$match: {isim:'ahmet'}},
    {$unwind: '$notlar'},
    {$match: {'notlar.onay': true}}

    şeklinde bir kod yazdım ama çalışmadı. [] olarak boş donuyor.


    Yani Ahmet'in sayfasına girdiğinde Ahmet'in bilgileri gelecek ve sayfanın en altında notlar kısmında sadece true olanlar görünecek.


    ¯\(ツ)/¯ ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gececi
    NighT_JudGe
    NighT_JudGe's avatar
    Kayıt Tarihi: 09/Aralık/2008
    Erkek
    biri bunu yazdı
    tahta bunu yazdı

    Hocam benim anladığım Ahmeti aramak bulmak istiyor ama ekranda adresler kısmında sadece "TRUE" olanlar yazsın istiyor. Örneğin adamın şuanki ikamet adresi bursa ve ben ekranda güncel olan bursayı göreyim istanbul ve ankara görünmesin. Sanırım böyle birşey istiyor.

    Evet, tam olarak bu.

    Notlar kısmında da dokümanlar büyük olduğu icin direkt sorguda azaltmam gerekiyor.

    Hocam benim  aklıma  direk iki array değişkene  atayıp  tek tek sorgulamak  geldi  ama  Yolbulucunun  Söylediği   gibi  daha  stabil gibide  geldi  çok   fazla  node.js  bilmiyorum ama 

     

    const sweetArray = [2, 3, 4, 5, 35]
    const sweeterArray = sweetArray.map(sweetItem => {
        return sweetItem * 2
    })
    
    console.log(sweeterArray)

    yani  ilk değeri  alıp   return  edip istediğin  sorguyu yazabilirsin   diye  düşünüyorum 


    Cahildim Dünyanın Rengine Kandım
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    biri bunu yazdı
    tahta bunu yazdı

    Hocam benim anladığım Ahmeti aramak bulmak istiyor ama ekranda adresler kısmında sadece "TRUE" olanlar yazsın istiyor. Örneğin adamın şuanki ikamet adresi bursa ve ben ekranda güncel olan bursayı göreyim istanbul ve ankara görünmesin. Sanırım böyle birşey istiyor.

    Evet, tam olarak bu.

    Notlar kısmında da dokümanlar büyük olduğu icin direkt sorguda azaltmam gerekiyor.

    ha pardon hocam yanlis anlamisim yeni uyanmistim

    aggregate deki filterla yapabilirsin sanirim bunu ya

    https://docs.mongodb.com/manual/reference/operator/aggregation/filter/

    simdi yazdim bi turlu calismadi syntax hatasi yaptim kesin, sen biraz kurcalarsin

    {
      "notlar": $filter: {
        input :"$notlar",
        as: 'item',
        cond: { $gte: [ "$item.onay", true ] }
      }
    }

     


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    crystalmeth
    crystalmeth's avatar
    Kayıt Tarihi: 25/Ağustos/2014
    Erkek

    bu şekilde çekebilirsin

    db.collection.aggregate( // Start with a $match pipeline which can take advantage of an index and limit documents processed
        {
            $match: {
                "notlar.onay": true
            }
        }, {
            $unwind: "$notlar"
        }, {
            $match: {
                "notlar.onay": true
            }
        })

     

    Sonuç:

     

     

    crystalmeth tarafından 17/Eyl/21 10:36 tarihinde düzenlenmiştir

    “Fortes Fortuna Adiuvat”
Toplam Hit: 2405 Toplam Mesaj: 17
mongo