Длина значения строкового поля в массиве в mongoDB - PullRequest
3 голосов
/ 08 апреля 2019

Как узнать длину символов из поля, вложенного в другое поле? и это в массиве. например:

{
    "_id" : ObjectId("687e1db"),
    "content" : {
        "ods" : "1102223000241",
        "startDate" : ISODate("2017-05-11T12:00:00Z"),
        "classes" : [
            {
              "driveNumber" : "9999078900007091",
              "number" : "00107605829357",
              "sId" : "0000000005009593"
            }
        ],
         "user" : "SoftLogic",
    },
    "level" : 2
}

и я хочу получить образец в content.classes.number, где в поле более 16 символов.

при отправке запроса я руководствовался длина значения строки в mongoDB

Либо этот запрос не подходит для данной ситуации, либо я делаю что-то не так.

db.Basis.find({
    "content.classes.number": { "$exists": true }, 
    "$expr": { "$gt": [ { "$strLenCP": "$content.classes.number" }, 16 ] }})

Я получаю сообщение об ошибке: https://gyazo.com/d2849406d36364de94d6ea89eff1c2b6

Я пробовал не только такие варианты.

UPD Монго версия 3.4.3

1 Ответ

1 голос
/ 09 апреля 2019

content.classes.number - это поле массива, а не строка, и поэтому ваш запрос не может работать.

Одним из решений здесь является использование оператора $arrayElemAt, но вы не знаете, с каким элементом вы хотите проверить. Но, например, я беру элемент 0th здесь.

db.Basis.find({
  "content.classes.number": { "$exists": true }, 
  "$expr": { "$gt": [{ "$strLenCP": { "$arrayElemAt": ["$content.classes.number", 0] }}, 16 ] }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...