#mongodb
Вопрос:
arr : [
[a,b],
[c,d],
[g,i]
]
Я хочу запросить приведенный выше массив таким образом, чтобы каждый массив в корневом массиве действовал по следующей логике:
включал A или B и C или D и G и I
В принципе, каждый вложенный массив действует как классификатор И, а элементы внутри этого вложенного массива действуют как классификатор ИЛИ
Обновление объекта внутри вложенного массива будет выглядеть следующим образом:
{
"foo":{ "$oid":"615469ac6187ab0c8613b7b6"},
"score":25,
}
И я бы указал идентификаторы объектов, которым я хочу, чтобы они соответствовали во вложенных массивах
Комментарии:
1. для первой части, чтобы выполнить и и или, я понял это, обновление, которое вы сделали в вопросе, я не понимаю, можете ли вы привести некоторые примеры данных, какова оценка? какие значения будут иметь a,b,c …? как мы добрались
{"foo" ... "score" 25}
, приведите пример входных данных, если можете, и ожидаемые выходные данные.
Ответ №1:
Запрос
- уменьшите, начиная с true
- каждый шаг похож (и
$$value
(или член1 член2))
db.collection.aggregate([
{
"$match": {
"$expr": {
"$reduce": {
"input": "$arr",
"initialValue": true,
"in": {
"$and": [
"$value",
{
"$or": [
{
"$arrayElemAt": [
"$this",
0
]
},
{
"$arrayElemAt": [
"$this",
1
]
}
]
}
]
}
}
}
}
}
])
Комментарии:
1. Спасибо за ответ, как бы я заменил начальное значение. Поскольку пример, который я упомянул, был просто абстракцией, фактический объект внутри 2d-массива находится в сообщении, которое я обновил