#mongodb #mongodb-query
Вопрос:
У меня есть коллекция документов, которые выглядят так:
{
"_id" : ObjectId("56b53b7ddd81cc134fac76a5"),
"name_info" : [
"name c" : [
{
"aliases": ["bill", "william"]
}
],
"name e" : [
{
"aliases": ["robert", "bill"]
}
],
]
}
{
"_id" : ObjectId("87653b745481cc134fac7235"),
"name_info" : [
"name b" : [
{
"aliases": ["stan", "stanley"]
}
],
"name c" : [
{
"aliases": ["robert", "bill"]
}
],
]
}
{
"_id" : ObjectId("65433b7563a1cc134fac7634"),
"name_info" : [
"name b" : [
{
"aliases": ["tom", "tommy"]
}
]
]
}
Какой запрос следует использовать в команде find() для возврата всех объектов, у которых есть псевдоним, содержащий «счет»?
Комментарии:
1. Поиск по фразе docs.mongodb.com/manual/reference/operator/query/text db.статьи.найти( { $текст: { $поиск: «»кофейня»»} } )
2. есть ли способ использовать регулярное выражение? Спасибо!
Ответ №1:
проверьте это
db.collection.aggregate([
{
$project: {
"results": {
"$map": {
"input": "$name_info",
"as": "el",
"in": {
"data": {
$objectToArray: "$el"
},
}
}
}
}
},
{
$unwind: "$results"
},
{
$unwind: "$results.data"
},
{
$unwind: "$results.data.v"
},
{
$unwind: "$results.data.v.aliases"
},
{
$match: {
"results.data.v.aliases": "bill"
}
},
])
пример:
https://mongoplayground.net/p/VTNXMLNNXis
проверьте также свою коллекцию