Запросите вложенный массив в mongo с помощью квалификаторов

#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-массива находится в сообщении, которое я обновил