Проблема поиска в массиве ObjectIds в статистической функции - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь сделать что-то, что должно быть довольно простым.Агрегатный конвейер позволяет проходить документы последовательно по этапам.Например, я могу отфильтровать некоторые документы и передать нужные документы на следующий этап.Это можно сделать с помощью $ match.Затем я хочу взять оставшиеся документы и сгруппировать их по полю, чтобы проверить наличие дубликатов.Но у меня есть серьезные проблемы с этим.Вот что я пробовал:

db.my_fields.aggregate( 
  { '$match' : { related_code_id:  { "$in" : [ BSON::ObjectId('5cddd0143ed1495e5c000008'),BSON::ObjectId('5cddd0143ed1495e5c000010')] } } },
  { '$group' : { _id: { 'field' : '$field', 'field_type_id' : '$field_type_id' }, count: { '$sum' : 1} } }, 
  {'$match' : { count: {'$gt' : 1}  } } 
)

Запрос работает нормально, за исключением первого $ match.Внутри оператора $ in я получаю эту ошибку:

2019-05-17T18:47:56.602-0400 E QUERY    [js] SyntaxError: missing ] after element list @(shell):2:95

Он жаловался на эту часть прямо здесь:

BSON::ObjectId('5cddd0143ed1495e5c000008'),BSON::ObjectId('5cddd0143ed1495e5c000010')

Как мне решить эту проблему и достичь своей цели:заставить этот базовый запрос работать?

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Если вы используете Mongoose в качестве ORM, вы можете решить ее следующим образом.

db.my_fields.aggregate( 
{ '$match' : { related_code_id:  { "$in" : [ mongoose.Types.ObjectId('5cddd0143ed1495e5c000008'),mongoose.Types.ObjectId('5cddd0143ed14 95e5c000010')] } } },
{ '$group' : { _id: { 'field' : '$field', 'field_type_id' : '$field_type_id' }, count: 
{ '$sum' : 1} } }, 
{'$match' : { count: {'$gt' : 1}  } } 
)
0 голосов
/ 18 мая 2019

Преобразование ObjectId в BSON не требуется:

https://docs.mongodb.com/manual/reference/method/db.collection.find/#query-using-operators

// ...
'$match': {
    related_code_id: {
        "$in": [
            ObjectId('5cddd0143ed1495e5c000008'),
            ObjectId('5cddd0143ed1495e5c000010')
        ]
    }
}
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...