вложенная структура запроса mongodb

#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"] }
        }
    }
});