Чтобы найти запись в вложенном массиве объектов MongoDB, вам потребуется использовать операторы запросов и операторы проекции.
Предположим, у нас есть коллекция "users" со следующей структурой:
{ "_id": ObjectId("5f7e262f5cc92c38344e5b53"), "name": "John", "email": "[email protected]", "address": [ { "street": "123 Main St", "city": "New York", "state": "NY" }, { "street": "456 Elm St", "city": "San Francisco", "state": "CA" } ] }
Чтобы найти всех пользователей, у которых адрес содержит заданный город, вы можете использовать оператор $elemMatch
:
db.users.find({ "address": { $elemMatch: { "city": "New York" } } })
Этот запрос найдет все записи, у которых хотя бы один объект в массиве "address" имеет поле "city" со значением "New York".
Если вы хотите найти все объекты в массиве "address" с заданным городом в независимости от остальных свойств, вы можете использовать оператор проекции $elemMatch
внутри оператора $filter
:
db.users.aggregate([ { $project: { filteredAddress: { $filter: { input: "$address", as: "addr", cond: { $eq: ["$$addr.city", "New York"] } } } } } ])
Это агрегационный запрос, который создаст новое поле "filteredAddress", содержащее массив объектов из "address", где поле "city" равно "New York".
Также возможно найти записи с использованием оператора $eq
без оператора $elemMatch
, если вам нужно найти записи, у которых поле "city" в любом объекте в массиве "address" равно "New York":
db.users.find({ "address.city": "New York" })
Этот запрос найдет записи, у которых хотя бы один объект в массиве "address" имеет поле "city" со значением "New York".
В обоих случаях результатом будет выборка записей, у которых условие выполнено и объекты с нужными значениями найдены в массиве "address".