Я пытаюсь получить все записи по условию соответствия, а затем хочу получить результат в отсортированном формате с использованием агрегирования pymongo. Вот моя коллекция выглядит так:
[{
"userId" : "user1",
"name" : "USER 1",
"description":"User has mobile no.",
"contacts" : [
{
"type" : "home",
"number" : "1234"
},
{
"type" : "mobile",
"number" : "3456"
}
],
"contactTypes" : [
"home", "mobile"
]
},
{
"userId" : "user2",
"name" : "USER 2",
"description":"User has office and no mobile number",
"contacts" : [
{
"type" : "office",
"number" : "1111"
}
],
"contactTypes" : [
"office"
]
},
{
"userId" : "user3",
"name" : "USER 3",
"description":"User has office no",
"contacts" : [
{
"type" : "home",
"number" : "1111"
},
{
"type" : "office",
"number" : "2222"
}
],
"contactTypes" : [
"home", "office"
]
}]
Теперь я хочу получить все документы, имеющие тип контакта Mobileили в описании есть мобильное слово (это вернет первые 2 документа), а также нужно отсортировать возвращаемый результат по contact.number.Так как у user2 есть contacts.number "1111", он должен сначала выглядеть следующим образом:
"userId" : "user2",
"name" : "USER 2",
"description":"User has office and no mobile number",
"contacts" : [
{
"type" : "office",
"number" : "1111"
}
],
"contactTypes" : [
"office"
]
},{
"userId" : "user1",
"name" : "USER 1",
"description":"User has mobile no.",
"contacts" : [
{
"type" : "home",
"number" : "1234"
},
{
"type" : "mobile",
"number" : "3456"
}
],
"contactTypes" : [
"home", "mobile"
]
}]
Поэтому мой запрос выглядит следующим образом:
db.collection.aggregate(
[
{
"$unwind": "contacts"
},
{
"$match": {
"$or": [
{
"description": {
"$regex": "mobile"
}
},
{
"contactTypes": {
"$regex": "mobile"
}
}
]
}
},
{
"$sort": {"contacts.number":1}
}
]
)
Но я получаю сообщение об ошибке типа - "не могусортировать по ключам, которые являются параллельными массивами "
Не уверен, что мне здесь не хватает или как мне написать запрос выше.