Почему я не могу использовать $ size и шаг $ project, а затем отфильтровать результат с помощью $ match? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть этот тип объекта в коллекции Mongo:

[  ...
   {array: ['keyword1', 'keyword2'], someField: "text", ...}
   ...
]

Я хочу использовать агрегацию, подобную этой:

db.getCollection("SomeCollection").aggregate(
    [   ...
        { "$project" : { "size" : {"$size" : "$someField"}}}
        { "$match": {size: {$gte: 2} } }
        ...
])

Когда я добавляю шаг сопоставления, у меня естьэто сообщение об ошибке:

{  
    "ok" : 0.0, 
    "errmsg" : "The argument to $size must be an array, but was of type: missing",
    "code" : NumberInt(17124), 
    "codeName" : "Location17124"
}

Я уверен, что есть массивы с более чем 2 элементами.

Мне любопытно, почему эта ошибка.Для записи у меня есть обходной путь, использующий $ where в запросе coll.find.

1 Ответ

0 голосов
/ 26 июня 2019

Агрегирование возвращает ошибку, поскольку на первом этапе передается поле, не являющееся массивом (someField), в оператор $size.Значение, переданное в $ size , должно преобразовываться в массив :

Аргумент для $ size должен преобразовываться в массив.Если аргумент для $ size отсутствует или не разрешается в массив, ошибки $ size.

Стоит также отметить, что в сообщении об ошибке указано but was of type: missing, поскольку поле в вашем документе имеетдругое имя (somefield) для агрегации (someField), означающее, что агрегация ничего не передает оператору $size.

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