2016-04-01 5 views
2

'u kullanarak `` `çok sayıda ilişkisi olan bir sorgu nasıl yürütülür Node, Express ile bir kurulumum var ve omurga kullanmak. Her şey iyi çalışıyor ve MongoDB koleksiyonları tarafından çalışanların kimlikleri veya tüm çalışanlar tarafından alınıp alınmadıkça kayıtları alabiliyorum. Ne Anlamakta zorlandığım aşağıdaki gibi daha karmaşık bir sorgu sözdizimi gerektiren MongoDB gelen koleksiyonları almak için yapılması gerekenler:MongoDB

db.employees.aggregate(
    [ 
    { $group : { _id : "$managerName", employees: { $push: "$fullName" } } } 
    ] 
) 

Şu anda ben bir json nesnesi olarak maruz istediğiniz verileri çıkartmak için aşağıdaki sözdizimine sahiptir ve html sayfamdaki öğelere bağlanır.

exports.findById = function(req, res) { 
    var id = parseInt(req.params.id); 
    db.collection('employees', function(err, collection) { 
     collection.findOne({'id': id}, function(err, item) { 
      res.jsonp(item); 
     }); 
    }); 
}; 

Bütün Yöneticileri ve onlara rapor ve sonra bir şekilde Liste başlığı gibi bir Yöneticisi listelemek istiyorum bireysel divlere ayarlı bu sonucu bağlamak ve rapor sonra tüm çalışanlar çalışanların listesini almak istiyorum liste öğeleri olarak onlara. Sonuç kümesi esas olarak ebeveynlerden ve çocuklardan oluşacaktır. Bunu dinamik olarak backbonejs kullanarak yapmak istiyorum.

Ben MongoDB için toplama boru hattı bir Array operasyonları geçmesini gerektirir

exports.findRelations = function(req, res) { 
    db.collection('employees', function(err, collection) { 
     collection.aggregate({ $group : { _id : "$managerName", employees:{$push: "$fullName" } } }, function(err, item) { 
      res.jsonp(item); 
     }); 
    }); 
}; 

cevap

0

gibi bir şey yapar mıydın. Bu, doğru sorgu olacağını şu anlama gelir:

db.collection('employees').aggregate([ 
    { $group : { _id : "$managerName", employees:{$push: "$fullName" } } 
    ]) 
    .toArray(function(err, managers){ 
    if (err){ 
     throw err; 
    } 

    res.jsonp(managers); 
    }); 

Burada NodeJS MongoDB sürücüsü ile toplama boru hattının kullanılması için ayrıntıları bulacaksınız:

+0

https://docs.mongodb.org/getting-started/node/aggregation/ teşekkür ederiz. Çalışmaya başladım, ama tuhaf bir şey var. MongomDB komutumu robomongo'da çalıştırdığımda, yönetici tarafından çalışanların listesi olan doğru sonuçlara ulaşıyorum. Böylece tüm yöneticiler listelenir ve ardından iç içe geçmiş, onlara rapor veren tüm çalışanlardır. Ama benim kodumdaki aynı tam sözdizimini kullandığım zaman elde ettiğim sonuç kümesi, koleksiyonumdaki tüm kayıtlarımın MongoDB betiğimin göz ardı edilmesine benziyor. Bu neden olsun ki? –

+0

RoboMongo'da hangi kodu çalıştırdınız? – gnerkus

+0

Sanırım şu an sorunuzu anlıyorum. MongoDB istemcisinin (RoboMongo aracılığıyla) ve MongoDB için Node.js sürücüsünün sözdizimi farklıdır. İstemci bu formda bir sorgu isterken: 'db.employees', Node.js sürücüsü bu formda bir sorgu gerektirir:' db.collection ('çalışanlar') ' – gnerkus