0

我想在我的一个文档中存储一个固定大小的数组。

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 个最新的报告将保存在报告列表中,然后按最旧到最新的顺序排列。

我做错了吗?

4

1 回答 1

1

Your second query should give you mostly what you're looking for. I agree with Amalia that it would be easier to get the correct order of the array in your application code.

However, there are some issues with the syntax of your second query. Update queries follow this pattern:

db.users.update({<query>}, {<update>})

Right now you're doing

db.users.update({<query, <update>})

If you change your query to

db.users.update({_id: id}, {$push: {reports: {$each: [newReport], $sort: {"updatedOn: 1}, $slice: -3}}})

It should work.

于 2013-09-20T14:46:07.547 回答