我想在我的一个文档中存储一个固定大小的数组。
IE 用户集合有一系列报告。每个报告都有一个时间戳。我想对数组中的报告进行排序,使最新的(最新的)位于数组的开头。
我正在尝试使用 $slice 方法,但我似乎只能保留数组中的最后 N 个元素。就我而言,我想保留数组中的前 N 个元素。
有什么方法可以让数组按最新时间排序,并且只存储 N 个最新报告。这样,当我查询 N 个最新报告时,我可以从数组的开头抓取。
var newReport = ...;
db.users.update({{_id: id},$push: {reports: {$each: [newReport], $sort: {"updatedOn": -1}, $slice: -3}}})
这将对最新到最旧进行排序,但由于切片为负数,因此 3 个最旧的报告保留在数组中。
var newReport = ...;
db.users.update({{_id: id},$push: {reports: {$each: [newReport], $sort: {"updatedOn": 1}, $slice: -3}}})
这将按最旧到最新排序,3 个最新的报告将保存在报告列表中,然后按最旧到最新的顺序排列。
我做错了吗?