我有两个集合:collection A
和collection B
。收集B" A_id"将收集来自收藏A的_id(有点像关系)。
收藏A
{
_id,
name
}
收集B
{
_id,
A_id,
other_id
}
我需要将收集A中的文档按文件重复量排序到收集B中的A_id(如果可能,按计数排序)。限制是我们不希望在集合A中有一个数组,因为B中的文档会增长很多,并且会不断更新。
知道如何进行这种排序吗?
非常感谢
答案 0 :(得分:1)
据我了解,这不是严格可行的。但是,您可以使用aggregation framework group function和$ sum累加器按A_id进行分组,这将为您提供A_id与集合B中具有该A_id的文档总数之间的映射。对该映射进行排序,然后您可以按照您描述的顺序从集合A中选择事物,尽管您必须在选择时强制执行排序时一次从集合A中进行选择。
另一个选项是在每个文档的集合A中都有一些计数字段,每次在具有特定A_id的集合B中插入某些内容时,您都将逻辑包含到increment。
答案 1 :(得分:1)
有很多方法可以做你所要求的。您必须首先了解有关数据的一些信息。 B文件有多少文件?
看起来你希望Collection A有一个包含B文档的items字段的情况。有16 MB的限制,但大多数情况下工作得很好。
在A上插入B记录的数量。 (即每次你插入一个B,你在{A}上的$inc
字段。然后,您将对A的计数字段执行索引并执行sort({count: -1})