我有一个这样的文件
{
"_id":"deviceId",
"scannedTags":[{tagId:"tagid", "someOtherDetail":"someOtherDetail"}]
}
我需要将scannedTags
数组的大小限制为20。
我的情况与SO Question的情况略有不同。我的数组总长度不应超过20。在推入20个元素(不是一次射击,可能在多种情况下)之后,第21个元素应覆盖数组中的第一个元素。
当前,我正在检索数组,并使用javascript的unshift
在第一个索引处插入元素,然后使用array.lenght = 20
来查找长度(如果大于20)。然后,我在MongoDB中更新集合中的文档。
此过程涉及很多IO。
另一种方法可能是使用上限集合,将集合大小设置为20并保留deviceid作为集合名称:不利的是设备数量过多,这将增加db中的集合数量。 即使我妥协了集合的数量,从这些集合中获取数据的查询也会使性能变得不友好。
是否可以通过一次推送来确保文档中仅存在最近的20条记录?