Агрегирование Mongodb $ size во вложенном массиве - PullRequest
1 голос
/ 25 сентября 2019

У меня проблема с запросом со структурой агрегации.Для данной коллекции с такими документами, как:

db.testSize.insert([{
    "internalId" :1,
    "first" : {
            "second" : [
                {
                    "value" : 1
                }
            ]
    }

}])

эта агрегация:

db.testSize.aggregate([
 { $addFields: { tmpSize: { $strLenCP: { $ifNull: [ { $toString: "$first.second.value" }, "" ] } } } },
])

возвращает эту ошибку:

{
    "message" : "Unsupported conversion from array to string in $convert with no onError value",
    "ok" : 0,
    "code" : 241,
    "codeName" : "ConversionFailure",
    "name" : "MongoError"
}

Теперь решение этой проблемы заключается виспользуйте unwind следующим образом:

db.testSize.aggregate([
 { $unwind: "$first.second"},
 { $addFields: { tmpSize: { $strLenCP: { $ifNull: [ { $toString: "$first.second.value" }, "" ] } } } },
])

Но мое требование состоит в том, чтобы создать общий подход для документов с различной формой и возможным вложенным массивом внутри массива.Из-за этой ошибки https://jira.mongodb.org/browse/SERVER-6436 кажется невозможным развернуть массив внутри массива, так как решить эту проблему?

Есть подход?

Некоторый контекст:

  • Я не могу изменить структуру документа до агрегирования
  • Я не знаю, где массив будет в «иерархии полей», если, например, первый - это массив, или второй -

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...