#mongodb #mongodb-query
#mongodb #mongodb-запрос
Вопрос:
Как я могу запросить эту вложенную структуру json, чтобы найти документы, содержащие «A»?
"categories":[{"id":12,"values":[["A","B","C"]]},{"id":17,"values":[["D","E","F"]]}]
До сих пор мне удалось получить значение id только с
db.coll.find( {categories: { $elemMatch: { id: 12 }}} )
Ответ №1:
Вам нужно вложить $elemMatch
операторы, чтобы они соответствовали вложенным уровням ваших массивов, чтобы соответствовать элементу:
db.coll.find({
"categories": {
"$elemMatch": {
"values": {
"$elemMatch": {
"$elemMatch": { "$in": ["A"] }
}
}
}
}
})
Ответ №2:
Хотя ответ Нила будет работать, вы можете сделать это только с двумя $elemMatch
операторами вместо трех, чтобы упростить задачу.
Вы можете использовать точечную нотацию, чтобы получить доступ к values
свойству, а затем вы можете использовать вложенные $elemMatch
операторы для проверки значения вложенного массива:
db.coll.find({
"categories.values" : {
$elemMatch : {
$elemMatch : { $in : ["A", "B"] }
}
}
});