2016-08-29 14 views
9

Belgedeki ve satırlarda bir yapı var. Bir satırın belgeye bir referansı vardır. Ancak bazı satırlarda başka bir satıra da referans olabilir.Belgelerdeki tüm satırları almak için sorgu

Hepinize belgelerde yer alan çizgileri (doğrudan bağlantılı hatlar anlam ve başvurulan çizgiler) almak üzere bir sorgu yapmak istiyorum.

Örnek

{_id:1, doc:1 }, 
{_id:3, doc:1, linkedLine:4}, 
{_id:4, doc:2 }, 
{_id:5, doc:2 }, 

I

linesOfDoc(1) = {_id:1, doc:1},{_id:3, doc:1, linkedLine:4},{_id:4, doc:2 } 
bir döngü yaparak ve mevcut olması halinde bağlı hatlar alma doc = 1 ilk çizgiler elde yapılabilir

elde etmek istiyorum.

Ama bu tek mongodb sorguda bunu yapmak mümkündür?

Selamlar Sen yapamaz

+0

Neden sonuçta {_id: 4, doc: 2} var? – styvane

+0

'{_ID: 4, doktor: 2} ', çünkü' sonucu olan {ebeveyn 1: 3, doktor _ID 4}' _ID 'işaret eden: 4' linkedLine için üst Renaming – ATX

+0

daha açık hale getirmek için . – ATX

cevap

2

Eğer sql ile yapacağını tam olarak, Mongo'da ile katılır, ancak aggregation pipeline ile yakın alabilirsiniz.

tek bir sorguda tüm verileri var ama belirttiğiniz tam sonuç almak için daha uzağa onu düzleştirmek gerekiyor.

MONGO> db.playground.find() 
{ "_id" : 1, "doc" : 1 } 
{ "_id" : 3, "doc" : 1, "linkedLine" : 4 } 
{ "_id" : 4, "doc" : 2 } 

MONGO> db.playground.aggregate([{ $lookup: { from: "playground", localField: "linkedLine", foreignField: "_id", as: "embeddedLinkedLine"}}, { $match: { doc: <id of the document youre looking for> }}]) 
{ "_id" : 1, "doc" : 1, "embeddedLinkedLine" : [ ] } 
{ "_id" : 3, "doc" : 1, "linkedLine" : 4, "embeddedLinkedLine" : [ { "_id" : 4, "doc" : 2 } ] }