mongodb:自动删除arrays的前n个元素

我想自动删除数组字段的前n个元素。

现在,我使用model.find() ,然后doc.arrayField.slice(n) ,然后doc.save() 。 但是,这会将整个文档加载到内存中(如果文档非常大,则不好),并且会消除primefaces性。

有没有办法在MongoDB / Mongoose中以primefaces方式实现?

谢谢!

您可以使用$pop以primefaces方式删除第一个元素。 或者,如果您可以指定要删除的字段,则可以使用$pull从数组中删除多个项目。 否则,在使用mongodb的primefaces操作中,不能从数组中删除前n个元素。

 db.yourCollection.update({}, {$pop: {arrayField: 1}}}) // will remove the first element from arrayField db.yourCollection.update({}, {$pull: {arrayField: {foo: "bar"}}}}) // will remove all elements whose foo field equal to bar from arrayField. 

MongoDB为数组更新提供$slice操作符。 https://docs.mongodb.org/v3.0/reference/operator/update/slice/

你也可以在Mongoose updateClause中使用。

而不是加载所有arrayField数据在内存中,您可以使用$切片来投影文档与arrayFields的前n个元素像这样

 model.find({}, {arrayField : {$slice: n}}) // n is first n elements 

现在你可以使用删除这n个元素

 doc.arrayField.slice(n); doc.save();