2014-01-28 2 views
0

У меня есть document, называемый Mapping, который имеет _id и массив объектов под названием Mappings. У меня есть еще collection под названием NewMappings. Для каждого _id в NewMappings, мне нужно найти в пределах Mappings (of Mapping collection) и вернуть _id из Mapping.Поиск коллекции MongoDB на основе другого

Я написал что-то вроде этого, но ничего не смог вернуть.

var d=db.NewMappings.find(); 
d.forEach(function(item){ 
    db.matching.find({Mappings: {$elemMatch : {TargetId: item._id}}}) 
}) 

однако, этот запрос возвращаемые значения

var d=db.NewMappings.find(); 
db.matching.find({Mappings: {$elemMatch : {TargetId: d[0]._id}}}) 

ли я что-то отсутствует? Пожалуйста, помогите мне. Я в темноте. заранее спасибо.

+0

В коде, где вы используете Foreach, вы создаете функцию, которая не возвращает значение. Вам нужно сохранить его или распечатать. –

+0

Можете ли вы добавить фрагмент кода, чтобы показать это? Благодарю. – user3245595

ответ

0

Один из способов, если вы просто хотите, чтобы увидеть результаты является:

var d=db.NewMappings.find(); 
d.forEach(function(item){ 
    db.matching.find({Mappings: {$elemMatch : {TargetId: item._id}}}).forEach(printjson) 
}) 

Вы также можете использовать aggregation framework

+1

Спасибо. Я предположил, что вторая находка возвращает только один документ. Я добавил часть forEach, и она сработала. – user3245595

0

Похоже, что вы пытаетесь сделать Join, которое не является явным поддерживается в MongoDB. Вам нужно будет либо использовать несколько функций агрегации, чтобы сгладить данные или mapreduce.

Вот пример использования MapReduce реструктурировать информации: http://cookbook.mongodb.org/patterns/pivot/

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