猫鼬聚合-对象数组中的第一个字段大于另一个字段

时间:2019-06-11 09:04:15

标签: node.js mongodb mongoose mongodb-query aggregation-framework

我们有一个复杂的查询正在尝试解决(我们知道它的复杂xD)

我们有一系列文件,其中包含有关财产的一般信息。每个属性都有一个定价字段,其中包含一个对象数组,我们在其中存储对属性的任何价格更改。定价对象共有三种,

  1. 已售:这是房屋出售时商定的最终价格
  2. 上市:这是该物业投放市场时的初始价格
  3. 更改:这是现有商品的价格变化。

基本上,我们想要做的是获得当前正在出售但价格已经降低的房地产的输出。

我们不确定如何实现这一目标。我们认为,我们将必须将“类型”设置为“更改”的对象进行比较,并将价格与具有“列出”类型的对象进行比较,因为所列价格为原始过帐价格,因此从技术上讲,低于此价格的任何减少被认为是降价。

但是,如果我们具有以下条件:

  1. 列出的价格:€50,000-2018/12/12
  2. 更改:40,000欧元-2018年12月13日
  3. 更改:39,000欧元-2018年12月14日

在这种情况下,我们如何分辨价格变化为€1,000?我们应该比较索引[2]和[3]而不是比较列出的项目吗?

我们试图保留最近的已知价格记录,但这带来了问题,主要是因为我们存储了4亿多个地址。

让聚合= AddressModel.aggregate();       Aggregate.unwind(“ _ listings”);

  // Listing status
  let listingsMatch = {
    "_listings.listing_status": "for_sale",
    "_listings.pricing.type": "change"
  };

  aggregate.match(listingsMatch);

  aggregate.group({
    "_id": "$_id",
    "full_address": { "$first": "$fullAddress" },
    "pricing": { "$first": "$_listings.pricing" },
  });

  aggregate.sort({
    "renewed_date": -1
  });

输出应仅是具有“ for_sale”状态且已降价的地址。

0 个答案:

没有答案