Mongoose聚合查询跳过getter

时间:2017-12-15 12:37:14

标签: node.js mongodb mongoose

我有以下猫鼬模式

Order.aggregate([
  { $match: { $and: [
    {status: 'COMPLETE'},
    {premises: mongoose.Types.ObjectId(premisesId)},
    {createdAt:{
      $gte: startOfToday,
      $lt: endOfToday
    }}
  ]}},
  {
    $group: {
      _id: {hour: {$hour: "$createdAt"}},
      count: { $sum: 1 },
      sales: { $sum: '$subtotal'}
    }
  },
  {
    $sort: {
      "_id.hour": 1
    }
  }
]).exec(function(err, orders){
  //do something
})

运行简单的查找查询会按预期返回小计值(例如11.99)。

当我运行聚合查询时,小计值不会像我预期的那样除以100。

number_of_scroll = 1857

while number_of_scroll > 0:
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)
    number_of_scroll = number_of_scroll-1

这是预期的聚合行为吗?

有没有办法可以强制聚合查询触发getter。

1 个答案:

答案 0 :(得分:0)

简短回答:是的,这是预期的行为。

更长的答案需要引用Model.aggregate的mongoose文档:

  

参数不会转换为模型的模式,因为$ project运算符允许在管道的任何阶段重新定义文档的“形状”,这可能使文档保持不兼容的格式。

基本上这意味着当使用聚合(包括getter)时,不会应用mongoose允许通过使用模式的任何魔法。您需要在管道中包含该转换。