【问题标题】:Meteor: group documents and publish an objectMeteor:对文档进行分组并发布一个对象
【发布时间】:2015-06-16 07:35:06
【问题描述】:

我想知道如何根据条件对文档进行分组,然后发布给客户端。

假设我有以下文件:

[
  { 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 }
  ]
}

有什么建议吗?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    这取决于您想在客户端或服务器上执行此操作。

    首先,显而易见的解决方案:如果您没有特定理由将它们存储在第一个结构中,则直接使用第二个结构存储它们。

    其次,另一个简单的解决方案是在客户端中制作。这是使用 undercore(与流星捆绑)的未经测试的代码:

    var yourCollection = CollectionName.find();
    var yourCollectionByDate = _.groupBy(yourCollection , 'createdAt');
    

    第三,您仍然可以在服务器上执行此操作,但您将失去集合的反应性(例如使用 Collection.aggregate 与包)或必须转换并随后观察所有更改(这有点矫枉过正。不过看看here if you want more info)

    还有一个简短的附注:除非您希望用户名是唯一的,否则您应该依赖 mongo 唯一 id (_.id) 而不是您设置的名称。这样,您可以确定您链接到正确的项目(没有重复)。

    【讨论】:

    • 我选择了第一个解决方案并更改了数据结构。对我来说,来自 SQL 数据库并不明显。我也尝试在服务器端使用第二种解决方案,但它不起作用,因为你只能发布一个数组,不能发布一个对象。
    猜你喜欢
    • 2021-05-05
    • 2018-02-19
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多