java - 如何在Spring data mongodb中根据条件投影字段?

标签 java mongodb spring-data-mongodb

我正在尝试根据搜索条件获取匹配的文档。一切工作正常,除了有一个名为“priceHistory”的列表字段,它有两个属性 1) 价格和 2) 价格日期。我只需要投影 PriceHisotry 字段,并且仅当今天的价格可用时,否则它必须显示为空。 PriceHistory 字段不是搜索条件的一部分,而只是结果(预测)的一部分。

  • 尝试使用简单的条件,但最终还是根据 价格历史日期字段。
  • 尝试使用 $Cond 但无法转换它 转换为 Java 等价物。
  • 最后的手段是迭代
    结果并实现所需的输出

    "priceHistory": [
                    {
                        "price": "20019.75",
                        "dateForPrice": "Tue Sep 09 02:00:00 IST 2019"
                    },
    {
                        "price": "20234.75",
                        "dateForPrice": "Tue Sep 08 02:00:00 IST 2019"
                    }
    {
                        "price": "20234.75",
                        "dateForPrice": "Tue Sep 08 02:00:00 IST 2019"
                    }
                ]
    

    ConditionalOperators.when(Criteria.where("priceHistory.price").gte(todaysDate)) .then(dynamicQuery.fields().include(value)).otherwise("");

有没有一种方法可以将这个条件添加到查询对象中,以便数据库可以为其工作,而不是迭代每个文档并操作响应。?

最佳答案

您可以在 MongoDB 查询中过滤字段“priceHistory”,如下所示:

db.collection.aggregate([
    {
    $project: {
        priceHistory: {
            $filter: {
                input: "$priceHistory",
                as: "ph",
                cond: {
                    $and: [
                        { $gte: ["$$ph.dateForPrice", start] },   // start time of the day 00:00:00 
                        { $lte: ["$$ph.dateForPrice", end ]  }    // end time of the day 23:59:59
                    ]
                }
            }
        }
    }        
}

])

从当前日期动态传递开始和结束日期和时间。这将过滤掉价格历史记录。

关于java - 如何在Spring data mongodb中根据条件投影字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57868688/

相关文章:

java - ZMQ 丢失事件在 jeromq scala 中传播

spring-boot - NoSuchMethodException QueryDSL 与 Spring Boot 和 Spring Data Mongo

mongodb - Spring Data mongodb 散列索引

java - 将 mongo 实体保存到不同的集合中

通过慢速 Internet 连接设置 MongoDB 副本

java - MongoDB JSON 文档格式

java - Spring boot - 如何使用异常处理程序处理页面未找到异常

java - 更具体的 javafx 数据验证

java - 从队列中获取 O(1) 时间内的最小值/最大值?

c# - 尝试更新 MongoDb 数组元素时出错