2015-07-08 2 views
0

Предоставляет ли mongoose способ поиска всех ссылочных документов из результата предыдущего запроса?Mongoose найти все ссылочные документы

Например:

Product 
.find(query) 
.exec(function(err, results) { 
    ... 
    Product 
    .find({ 
    '$or': [ 
     // get all products where _id is in results.associatedProducts[] 
    ] 
    }) 
    ... 
}); 

ответ

1

Я не смог найти способ сделать это изначально с мангуста см ниже рабочего раствора.

Product 
    .find(query) 
    .exec(function(err, products) { 
    ... 
    var associatedSoftware = products.reduce(function(memo, current) { 
     if(current.features && current.features.associatedSoftware) { 
     return memo.concat(current.features.associatedSoftware.map(function(item) { 
      return item._id; 
     })); 
     } 
     return memo; 
    }, []); 

    Product.find({ 
     '$or': [ 
     ... 
     { '_id': { '$in': associatedSoftware } } 
     ... 
     ] 
    }) 
    .exec(function(err, associated) { 
     ... 
    }); 
    }); 
0

Да.

Вы можете использовать query population.

Product 
.find(query) 
.populate('associatedProducts') 
.exec(function(err, results) { 
    // ... 
}); 

Это вернет вам объект, отформатированный как это:

var product = { 
    foo: bar, 
    associatedProducts: [ 
     // Here are the associated products 
     { 
      // Product Object 
     }, 
     { 
      // Product Object 
     }, 
     { 
      // Product Object 
     } 
    ] 
}; 
+0

Меня интересуют только результаты второго запроса. Население заполнит субдокументы для каждого документа, возвращенного в первом запросе выше. – raygerrard