#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