我想知道如何根据条件对文档进行分组,并发布给客户。
假设我有以下文件:
[
{ name: 'John', createdAt: some_date_value_1 },
{ name: 'Jane', createdAt: some_date_value_2 },
{ name: 'Bob', createdAt: some_date_value_1 },
{ name: 'Jenny', createdAt: some_date_value_2 }
]
我可以做些什么来发布这样的结果?
{
some_date_value_1: [
{ name: 'John', createdAt: some_date_value_1 },
{ name: 'Bob', createdAt: some_date_value_1 }
],
some_date_value_2: [
{ name: 'Jane', createdAt: some_date_value_2 },
{ name: 'Jenny', createdAt: some_date_value_2 }
]
}
有什么建议吗?
答案 0 :(得分:1)
这取决于您是否希望在客户端或服务器上执行此操作。
首先,显而易见的解决方案是:如果您没有特定的理由将它们与第一个结构一起存储,请使用第二个结构直接存储它们。
其次,另一个简单的解决方案是在客户端制作。这是一个使用undercore(与meteor捆绑在一起)的未经测试的代码:
var yourCollection = CollectionName.find();
var yourCollectionByDate = _.groupBy(yourCollection , 'createdAt');
第三,您仍然可以在服务器上执行此操作,但要么您将失去您的集合的反应性(例如使用Collection.aggregate
与包),或者必须转换并观察之后的所有更改(这将是一点点过度杀戮。但看看here if you want more info)
快速注释:除非您希望用户名称是唯一的,否则您应该依赖于mongo唯一ID(_.id
)而不是您设置的名称。这样,您确定链接到正确的项目(没有重复)。