2016-09-13 26 views
6

Başlık, her şeyi açıklıyor. Bir belge eşleşen alana göre eşleşen herhangi bir dış belgeye neden olmazsa nasıl olur, nasıl olur da boru hattının sonuç kümesine dahil edilmez?

Mongo 3.2'deki yeni toplayıcıları test ediyorum ve ilk önce açarak dizilmiş bir dizi araması gerçekleştirecek ve daha sonra belgeleri yeniden gruplandıracak kadar ileri gittim. Tüm sahip olduğum sonuçların, $lookup ölçütlerini karşılamayan tüm yerel belgeleri içermesidir; bu, "sol dış birleştirmenin" standart tanımı olduğunu düşündüğüm şeydir. İşte

sorgu var: Ben boş profile.universities dizi olan bir user var ise

db.users.aggregate([ 
    { 
     $unwind: "$profile", 
     $unwind: "$profile.universities" 
    }, 
    { 
     $lookup: { 
      from: "universities", 
      localField: "profile.universities._id", 
      foreignField: "_id", 
      as: "profile.universities" 
     } 
    }, 
    { 
     $group: { 
      _id: "$_id", 
      universities: { 
       $addToSet: "$profile.universities" 
      } 
     } 
    } 
]).pretty() 

, o zaman ben ne olursa olsun herhangi bir eşleşme dönen $lookup kümesi sonucu dahil edilmesi gerekir, ancak öyle değil. Bunu nasıl yapabilirim ve Mongo'nun bu şekilde çalışması için $lookup'u neden yaptın?

cevap

16

Bu davranış, $lookup ile ilgili değil, çünkü $unwind için varsayılan davranış, başvurulan alanın eksik olduğu veya boş bir dizinin bulunduğu belgelerin atlanmasıdır. Bu tam olarak sorun oldu,

db.users.aggregate([ 
    { 
     $unwind: "$profile", 
     $unwind: { 
      path: "$profile.universities", 
      preserveNullAndEmptyArrays: true 
     } 
    }, 
    { 
     $lookup: { 
      from: "universities", 
      localField: "profile.universities._id", 
      foreignField: "_id", 
      as: "profile.universities" 
     } 
    }, 
    { 
     $group: { 
      _id: "$_id", 
      universities: { 
       $addToSet: "$profile.universities" 
      } 
     } 
    } 
]).pretty() 
+1

Şaşırtıcı: profile.universities boş bir dizi olsa bile

Eğer true onun preserveNullAndEmptyArrays seçeneği ayarlayabilirsiniz, çözülür belgeleri korumak için. Çok teşekkür ederim!! –

İlgili konular