是否可以删除数组中的第一个元素?
Is it possible to delete the firsts elements in an array?
我正在编写一个应用程序,在代码的一部分中我需要从数组中删除一定数量的元素,但我对 MongoDB/Mongoose 没有太多经验。
例如,我的查询需要删除数组的前 n
个元素:
let array = ["a", "b", "c", "d", "e"];
if (n < array.length) {
array = array.slice(n); // Delete the first n values
}
我可以循环我的代码,但它会做很多查询,一个一个地删除,这对性能不利。我的另一种选择是查询数组元素,在代码中切片,然后用另一个查询更新数据库数组。这也是一个不错的选择,但我更愿意在这里问,因为也许有一种方法可以只用一个查询来完成。
我知道 MongoDB 中有一种方法可以只删除 first/last 元素,但我还没有找到任何关于删除多个元素的方法。
Model.updateOne(filter, { $pop: { list: -1 } });
你好,你查询的时候可以看看$slice
operator。也就是说,如果您要从数组的末尾 中删除 多个元素,或者从数组的开头 中删除 多个元素,则效果很好。但是如果你从数组的中间移除,首先找到文档可能更容易,在 JavaScript 中应用标准的 .slice()
操作,然后用新数组保存文档,通过在文档上调用 .save()
方法。
作为 $slice
运算符的示例:
const document = { "_id" : 3, "scores" : [ 89, 70, 100, 20 ] }
db.students.update(
{ _id: 3 },
{
$push: {
scores: {
$each: [ ],
$slice: -2
}
}
}
)
/*
Our result is the last two elements, and we removed the first two.
*/
const result = { "_id" : 3, "scores" : [ 100, 20 ] }
或者你可以像下面这样:
db.students.update({_id: 3}, [
{$set: {scores: {
$slice: ["$field", {$add: [1, P]}, {$size: "$field"}]
}}}
]);
其中 P 是您要在数组中停止删除的元素的索引,将 P 留给结束元素。 (意味着 P 之前的所有元素都被删除)
或者这样:
db.students.update({_id: 3}, [
{$set: {scores: {
$slice: ["$field", P]
}}}
]);
其中 P 是您要在数组中从末尾停止删除的元素的索引,让您从开始到 P 元素。 (意思是去掉P之后的所有元素)
我正在编写一个应用程序,在代码的一部分中我需要从数组中删除一定数量的元素,但我对 MongoDB/Mongoose 没有太多经验。
例如,我的查询需要删除数组的前 n
个元素:
let array = ["a", "b", "c", "d", "e"];
if (n < array.length) {
array = array.slice(n); // Delete the first n values
}
我可以循环我的代码,但它会做很多查询,一个一个地删除,这对性能不利。我的另一种选择是查询数组元素,在代码中切片,然后用另一个查询更新数据库数组。这也是一个不错的选择,但我更愿意在这里问,因为也许有一种方法可以只用一个查询来完成。
我知道 MongoDB 中有一种方法可以只删除 first/last 元素,但我还没有找到任何关于删除多个元素的方法。
Model.updateOne(filter, { $pop: { list: -1 } });
你好,你查询的时候可以看看$slice
operator。也就是说,如果您要从数组的末尾 中删除 多个元素,或者从数组的开头 中删除 多个元素,则效果很好。但是如果你从数组的中间移除,首先找到文档可能更容易,在 JavaScript 中应用标准的 .slice()
操作,然后用新数组保存文档,通过在文档上调用 .save()
方法。
作为 $slice
运算符的示例:
const document = { "_id" : 3, "scores" : [ 89, 70, 100, 20 ] }
db.students.update(
{ _id: 3 },
{
$push: {
scores: {
$each: [ ],
$slice: -2
}
}
}
)
/*
Our result is the last two elements, and we removed the first two.
*/
const result = { "_id" : 3, "scores" : [ 100, 20 ] }
或者你可以像下面这样:
db.students.update({_id: 3}, [
{$set: {scores: {
$slice: ["$field", {$add: [1, P]}, {$size: "$field"}]
}}}
]);
其中 P 是您要在数组中停止删除的元素的索引,将 P 留给结束元素。 (意味着 P 之前的所有元素都被删除)
或者这样:
db.students.update({_id: 3}, [
{$set: {scores: {
$slice: ["$field", P]
}}}
]);
其中 P 是您要在数组中从末尾停止删除的元素的索引,让您从开始到 P 元素。 (意思是去掉P之后的所有元素)