Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor mongodb数据透视和更优雅的代码_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript Meteor mongodb数据透视和更优雅的代码

Javascript Meteor mongodb数据透视和更优雅的代码,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我有一个箱子,里面有所有相关细节: 但为了便于回答,这里有一些细节。我有这些模型示例: Orders = { _id: "T487wBz7Pvzjo2QHh", beverages: [ { _id: "8ea26bb103efae385f80f881", delivered: false, name: "Wine", units: "55" } ], location: "yTKWLFwSDvp3DyCkx",

我有一个箱子,里面有所有相关细节:

但为了便于回答,这里有一些细节。我有这些模型示例:

Orders = {
  _id: "T487wBz7Pvzjo2QHh",
  beverages: [
    { 
      _id: "8ea26bb103efae385f80f881",
      delivered: false,
      name: "Wine",
      units: "55"
    }
  ],
  location: "yTKWLFwSDvp3DyCkx",
  locationName: "Ladies Garden",
  locationNumber: "101",
  timestamp: 1398393004864,
  user_id: "W3Fdq36Ts2TdWxCRP",
  username: "jgeezy"
};

Locations = {
  _id: "yTKWLFwSDvp3DyCkx",
  beverages: [
    {
      _id: "e5552a68266ed76895b8228a",
      fillTo: "10",
      name: "Wine Coolers",
      orderWhen: "10",
      startUnits: "10"
    }
  ],
  name: "Teen Cabana",
  number: "103",
  organization: "Super Happy Teens!",
  vendor: false
};
我需要在每个位置的表中呈现一些行,这些行将显示每个位置的未交付饮料订单总数。我已经编写了此函数:

Template.dashboardOrders.undeliveredOrders = ->
  undeliveredOrders = Orders.find({'beverages.delivered': false}, {
    transform: (order) ->
      order.unfilledOrders = 0
      _.each order.beverages, (bev) ->
        if not bev.delivered
          order.unfilledOrders += 1
      order
  })
但这给了我一个按顺序排序的数组&时间戳。我要寻找的输出是一个按唯一位置和时间戳排序的数组。不完全确定如何到达那里,但我一直在尝试不同的map&reduce方法,因为我感觉这是一条路要走,但我被卡住了。非常感谢您的帮助

另外,由于必须返回order对象并使用+=递增,我的方法感觉不公平。我觉得也许有更好的方法可以做到这一点。

为什么不:

Template.dashboardOrders.undeliveredOrders = ->
  Orders.find
      beverages.delivered: no
    ,
      sort:
        location: 1
        timestamp: 1
?


如果你真的想要一个数组而不是一个光标,那么在末尾添加
.fetch()

我只想添加第二个答案来回答@jasonzales的第二个问题。我的第一个答案,就是查询,返回了所有未送达的订单,并按位置和时间戳对它们进行了排序。根据评论,还需要以下内容:

我想包括每个位置的所有未交付订单,我需要每个位置的未交付订单计数

有很多方法可以实现这一点。我认为最简单的方法是不要将所有数据都挤入查询,而是处理查询返回的数据:

Template.dashboardOrders.undeliveredOrdersByLocation=->
orders=orders.find
饮料:否
,
排序:
地点:1
时间戳:1
#创建一个对象locations,按位置保存未送达的订单;
#对象键是位置id,值是mongo文档:
位置={}
#循环浏览所有未送达的订单,并将每个订单添加到locations对象:
orders.forEach(doc)->
除非位置[单据位置]?
地点[文件地点]=
未送达订单:[]
未送达订单数:0
地点:doc.location
locationName:doc.locationName
地点编号:doc.locationNumber
#等等,模板还需要什么
位置[doc.location].undeliveredOrders.push单据
位置[doc.location]。未送达订单数++
#将locations对象转换为数组以在模板中使用:
返回值(位置)#不需要保留键
您没有给出模板的示例,但您可以使用
位置
数组,如下所示:

{{{#每个未送达的OrdersByLocation}
有{{locationName}的{undeliveredOrdersCount}}未送达订单:
{{#每个未交付订单}
{{username}}在{{timestamp}}上提交的订单,用于:
    {{{每种饮料}
  • {{units}}{{name}}的{{units}单元需要交付
  • {{/每个}}
{{/每个}} {{/每个}}
根据您的需要,使用下划线方法
groupBy
groupBy
相对容易,但我不太理解这个问题。您想要按位置(即
countBy
)或按位置和时间戳(即
groupBy
)排序的数组显示未送达的饮料订单总数吗?很明显,它们将是两种不同的东西。谢谢你提出的更优雅的问题,但它仍然只能让我走一段路。我想包括每个位置所有未交付的订单,我需要每个位置的未交付订单计数。不!给你绿色的复选标记,我的兄弟。谢谢。通过创建更多帮助程序来检索.undeliveredOrders数组的长度等,可以避免在对象上添加额外的属性。这实际上并不影响性能,只是您喜欢如何组织代码。