MongoDB: условия массива верхнего уровня - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть массив массивов в MongoDB 4.2.2:

db.foo.insertOne({'foo': [[1, 3], [2], [3]]})

Я хотел бы удалить элементы foo, первые элементы которых больше 1. Но я не могу понять, как.

Я пробовал что-то подобное (и многие другие), но ничего не тянет:

db.foo.update({}, {$pull: {foo: {'0': {$gt: 1}}}})

Возможно ли это?

РЕДАКТИРОВАТЬ: Ожидаемый результат:

db.foo.find({})
{ "_id": ObjectId("..."), "foo": [ [1, 3] ] }

1 Ответ

1 голос
/ 13 февраля 2020

Если вы используете MongoDB 4.2, вы можете использовать конвейер в новом обновлении. Это позволяет передавать конвейер агрегации в качестве аргумента обновления:

db.foo.update({},[
    {$addFields:{
        foo:{
            $filter:{
                input:"$foo",
                cond:{
                    $lte: [{$arrayElemAt: ["$$this", 0]}, 1]
                }
            }
        }
    }}
  ])
...