2017-02-13 3 views
1

У меня есть коллекция мангуста, которая выглядит, как этотMongoose Совокупные получить все документы, совпадающие с критериями, на который ссылается набор документов, соответствующих другой критерий

[{ 
    _type:'video', 
    _id:'video1', 
    status:'active' 
}, 
{ 
    _type:'video', 
    _id:'video2', 
    status:'active' 
}] 

И другой коллекции, как этот

[{ 
    _type:'product', 
    _id:'product1', 
    items:['video1'] 
}] 

Как можно я использую агрегат мангуста для поиска всех документов с _типом «видео», которые указаны в поле «элементы» любого документа с типом «продукта»

Что я хочу в результате

[{ 
    _type:'video', 
    _id:'video1', 
    status:'active' 
}] 

это то, что я до сих пор, но «connectedVideos» всегда пустой массив

[{ 
    "$match":{ 
     "_type":"product" 
    } 
}, 

{ 
    "$project": { 
     "items":true, 
     "_id":true, 
     "title":true 
    } 
}, 
{ 
    "$unwind":"$items" 
}, 
{ 
    "$lookup": { 
     "from": "videos", 
     "localField": "items", 
     "foreignField": "_id", 
     "as": "connectedVideos" 
    } 
} 
] 
+0

Возможный дубликат [$ lookup для ObjectId's в массиве] (http://stackoverflow.com/questions/34967482/lookup-on-objectids-in-an-array) – Veeram

+0

Я не думаю, что это так, вопрос, который вы связали, показывает, как сделать противоположное тому, что я ищу. Мне нужно найти все «видео» документы, которые содержатся в поле «элементы» набора документов «продукта», Вопрос, который вы упомянули, будет, если бы я хотел найти все «товарные» документы, которые содержат выбранные «видео» документы? –

+0

Я имею в виду, что вам просто нужно «раскручивать» в конце, чтобы сгладить массив видео. Разве это не то, что вам нужно? '[{ "$ матч": { "_type": "продукт" } }, { "$ разматывает": "$ пункты" }, { $ поиска: { из: "видео", localField: "items", foreignField: "_id", as: "videos" } }] '. Это даст вам все видео для каждого продукта. – Veeram

ответ

0

Оказывается, что $ поиск размещен выше должен работать, но нет и, кажется, что это связано с моей localField быть строка моей foreignField будучи ObjectId так я отправил более рафинированный вопрос подробно вопрос здесь

$lookup localField as string but foreignField as ObjectId

 Смежные вопросы

  • Нет связанных вопросов^_^