Mongo: 使用$in数组参数对结果进行排序

24 浏览
0 Comments

Mongo: 使用$in数组参数对结果进行排序

我有两个集合usersitemsuser.profile.savedItems是一个保存项的数组,格式如下:{"itemId" : "yHud5CWpdPaEc6bdc", "added" : ISODate("2014-09-12T22:28:11.738Z")}

我想做的是从用户配置文件中检索出这些项(这部分已经实现),并根据添加日期对它们进行排序。

目前,这是我拥有的代码:

return {items: Items.find({_id: {$in: _.pluck(Meteor.user().profile.savedItems, 'item')}})};

我不知道是否可以使用常规的mongo语法...

0
0 Comments

Mongo: sort results with $in array parameter

在使用MongoDB时,有时我们希望根据一个数组参数进行排序。然而,MongoDB并不直接支持这种排序方式,因此我们需要找到一种解决方法。下面将介绍出现这个问题的原因以及解决方法。

出现这个问题的原因有两个选项:

1. 存储排序后的项目。

2. 在客户端读取后进行客户端排序。

然而,无法通过读取未排序的项目并进行服务器端排序来实现排序。因此,我们需要找到其他的解决方法。

有一个解决方法是使用addToSet函数,但是通过搜索发现$position操作符似乎无法与addToSet一起使用。尽管项目已经自然排序,但是我需要按相反的顺序排序。但是由于项目本身没有"added"参数,所以无法直接进行排序。

可以参考MongoDB官方文档中的技术,将数组按照插入的顺序进行存储。

还有第三个选项是将这些项目放在一个单独的集合中,并使用MongoDB进行排序。

尝试按顺序插入数据,但是发现Meteor的Minimongo在处理排序时落后于MongoDB,并且$sort操作需要$each参数。但是我想到了另一种解决方法。我可以创建一个"items"的新克隆集合,并为每个项目添加额外的"added"属性,通过映射对应的id来进行排序。

通过以上方法,我们可以解决MongoDB中使用$in数组参数进行排序的问题。

0