2015-03-02 4 views
0

Пример документа из базы данныхПоиск в суб суб суб массива

{ 
    "_id": ObjectId("54f44a657f8b9a1d318b4567"), 
    // other fields 
    "ligaments": [ 
    [ 
     { 
     "data": "dia", 
     "order": 0 
     }, 
     { 
     "data": "hub", 
     "order": 1 
     } 
    ], 
    [ 
     { 
     "data": "pcd", 
     "order": 0 
     }, 
     { 
     "data": "width", 
     "order": 1 
     } 
    ] 
    ] 
} 

Мне нужно найти все записи, в которых ligaments поле содержит data: 'parameter' атрибут. Как сделать такой запрос?

+0

Попробуйте 'db.collection.find ({ligaments.data: 'parameter'})'? – ccheneson

+0

Хотя mongodb является схематичным, это не означает, что вам не нужно думать о вашей схеме. –

+0

Хорошо, я не правильно спросил, мне нужно найти весь документ с одним из элементов поля связки, который содержит только данные «pcd» и «width». –

ответ

0

Если вы хотите искать внутри вложенных массивов, вы можете сделать это с помощью $elemMatch оператора:

//returns all the documents that have data equal to 'pcd' or 'width' 
db.collection.find({ligaments: {$elemMatch: {$elemMatch: { data: {$in: ['pcd', 'width']}}}}}); 

Если вы хотите задать определенный пользователем параметр, вы можете сделать это мой настройки запроса:

//returns all the documents that have data equal to 'parameter' 
db.collection.find({ligaments: {$elemMatch: {$elemMatch: { data: 'parameter'}}}}); 
+0

Этот запрос не возвращает результатов –

+0

@ i.paramonov Предполагаю, что вы изменили коллекцию в моем запросе с вашей фактической коллекцией? Я попытался запустить этот запрос, и он работает нормально. –

+0

Я не могу найти по этому запросу, я использую версию mongodb 2.6.6. И запрос возвращает нулевые результаты –

0

Первая ваша структура документа была сложной, но, все же, если вы хотите найти свой выход попробуйте ниже сценарий

db.collectionName.aggregate({ 
    "$unwind": "$ligaments" 
}, { 
    "$unwind": "$ligaments" 
}, { 
    "$match": { 
    "ligaments.data": { 
     "$in": ["pcd", "width"] 
    } 
    } 
}, { 
    "$project": { 
    "_id": 0, 
    "ligaments": "$ligaments" 
    } 
}) 
Смежные вопросы