#mongodb #aggregation-framework
#mongodb #агрегация-фреймворк
Вопрос:
Я использую область MongoDB и имею функцию, которая выдает массив идентификаторов строк.
Затем, используя конвейер агрегации, я хочу вернуть все документы из коллекции, где их массив идентификаторов объектов, называемый ‘categoryIds’, содержит по крайней мере один из этих строковых идентификаторов.
if (categories) {
pipeline.push(
{
$project: {
categoryObjectIds: { $map: { input: categories, as: 'category', in: { "$toObjectId": "$category" } } }
}
},
{
$match: {
"categoryIds": {
"$in": '$categoryObjectIds'
}
}
}
);
}
В настоящее время я пытаюсь сказать, если был предоставлен массив строк (категории), доведите эти этапы до конца конвейера.
Первый этап — преобразовать массив строк в массив идентификаторов объектов, второй — попытаться сопоставить документы, идентификаторы категорий которых включают хотя бы один из этих идентификаторов из первого массива.
Когда я запускаю это, я получаю «(BadValue) $in нуждается в массиве», что я здесь делаю не так?
Обновить
{
"_id": {
"$oid": "5faff3f5a87269ccfb8fd502"
},
"name": "Albert's Schloss",
"categoryIds": [{
"$oid": "5faff41da87269ccfb8fd503"
}, {
"$oid": "5faff42ca87269ccfb8fd504"
}],
"aggregateRating": {
"$numberDecimal": "4.8"
},
"photoURL": "",
"location": {
"type": "Point",
"coordinates": [{
"$numberDecimal": "53.478214"
}, {
"$numberDecimal": "-2.247828"
}]
},
"openingTimes": {
"monday": {
"openingTime": {
"$date": "0001-01-01T09:00:00.000Z"
},
"closingTime": {
"$date": "0001-01-01T23:00:00.000Z"
}
},
"tuesday": {
"openingTime": {
"$date": "0001-01-01T09:00:00.000Z"
},
"closingTime": {
"$date": "0001-01-01T23:00:00.000Z"
}
},
"wednesday": {
"openingTime": {
"$date": "0001-01-01T09:00:00.000Z"
},
"closingTime": {
"$date": "0001-01-01T23:00:00.000Z"
}
},
"thursday": {
"openingTime": {
"$date": "0001-01-01T09:00:00.000Z"
},
"closingTime": {
"$date": "0001-01-01T23:00:00.000Z"
}
},
"friday": {
"openingTime": {
"$date": "0001-01-01T09:00:00.000Z"
},
"closingTime": {
"$date": "0001-01-01T23:00:00.000Z"
}
},
"saturday": {
"openingTime": {
"$date": "0001-01-01T09:00:00.000Z"
},
"closingTime": {
"$date": "0001-01-01T23:00:00.000Z"
}
},
"sunday": {
"openingTime": {
"$date": "0001-01-01T09:00:00.000Z"
},
"closingTime": {
"$date": "0001-01-01T23:00:00.000Z"
}
}
}
}
Это пример документа, если, например, я предоставляю функцию, categories = ['5faff41da87269ccfb8fd503'];
я бы ожидал, что этот документ вернется в результате, потому что его массив categoryIds содержит один из идентификаторов, которые я предоставил
Комментарии:
1. Не могли бы вы предоставить образец документа и желаемый результат?
2. Я привел пример документа. Если, например, я предоставляю функцию,
categories = ['5faff41da87269ccfb8fd503'];
я бы ожидал, что этот документ вернется в результате, потому что его массив categoryIds содержит один из идентификаторов, которые я предоставил