在MongoDB中按某个子数组元素对父记录进行排序

时间:2019-03-29 20:52:08

标签: mongodb mongodb-query aggregation-framework

我们正尝试将房地产属性搜索从SQL Server移植到MongoDB。每个属性可以有多个列表,我们将其作为子数组直接存储在每个记录中,如下所示:

    {
        "propertyId": 18023335652,
        "latitude": 33.67654,
        "longitude": -117.790335,
        "listings": [{
                "orgId": "",
                "listingId": "",
                "offMarketDate": "2001-07-06T00:00:00",
                "soldPrice": 273000,
                "bedrooms": 3,
                "bathrooms": 3,
                "livingAreaInSqFt": 1653,
                "yearBuilt": 1980,
                "rank": 3
            },
            {
                "orgId": "caclaw-n",
                "listingId": "11234029",
                "offMarketDate": "2015-02-12T00:00:00",
                "soldPrice": 325000,
                "bedrooms": 4,
                "bathrooms": 3,
                "livingAreaInSqFt": 1646,
                "yearBuilt": 1980,
                "rank": 2
            }
        ]
    }
}

当将属性/列表导入MongoDB时,我们具有确定每个列表“排名”的业务逻辑,因此我们知道哪个是“首选”列表,并且应将给定属性显示给特定用户。这并不像在每个列表上设置“ isPreferred”值或使用Rank = 1的列表那样简单,因为执行属性搜索的用户可能无法访问某些列表(它们位于不同的MLS中)。我想编写一个执行以下操作的MongoDB查询:

  1. 按属性的列表值(例如Listings.Bedrooms = 3)过滤
  2. 过滤其余所有属性的列表,使其仅包括首选属性(Listings.Rank最低)。
  3. 按某些字段(例如Listings.Bedroom asc)对其余属性进行排序,但请确保将排序应用于首选列表。

我将如何在MongoDB中做到这一点?

0 个答案:

没有答案