Добавьте много первых n элементов в базу данных mongo

#mongodb #slice

Вопрос:

У меня есть этот документ, который мне нужно обновить { «_id» : «1234», «arr» : [ 1, 2, 3, 4 ] }

Я хочу удалить первые n элементов из массива. Я думал о том, чтобы сделать что-то подобное:

  db.collection.update({
      _id: "1234"
    },
    {
      "$push": {
        "arr": {
          "$each": [],
          "$slice": {`n-arr.length`}
        }
      }
    })
 

Есть ли способ использовать выражение {n — ‘об.длина’} в разделе среза?
Спасибо…»

Ответ №1:

используйте конвейер обновления

 db.collection.update({_id:"1234"},
[
      {
        $addFields: {
          gg : {$filter:{
            input:"$arr",
            as:"z",
            cond:{$gte:[{$indexOfArray:["$arr","$z"]},5]} // 5 is n first item
        }}
        },
      },
      {
        $project: {
          arr: "$gg",
          _id: 1,
          
        },
      },
    ]
)
 

Комментарии:

1. в моем примере выход для arr=[1,2,3,4,5,6,7,8,9] равен [6,7,8,9] хотел ли я этого ?

2. ваш пример не работает для меня 2: mongoplayground.net/p/GCLlVWQZlC7

3. я проверил ваш запрос, вы задали идентификатор в виде строки и запросили идентификатор в качестве посредника, что было проблемой

4. проверьте это mongoplayground.net/p/j-3g4Y1IHtW