MongoDB文档中的ETag工具-Java驱动程序

MongoDB文档中的ETag工具-Java驱动程序,mongodb,Mongodb,我的Java应用程序具有访问MongoDB集合的REST GET API(使用JAX-RS实现)。 我试图引入web缓存以减少响应时间(通过减少MongoDB端的文档读取) 我正在寻找为资源提供ETag()的标准方法(资源来自MongoDB集合中的文档),这样每当文档更新时,MongoDB集合中的ETag都会自动更新 现在,我可以用MongoDB文档中的ETag验证HTTP请求中的ETag(“如果不匹配”),如果两者相同,则返回304(未修改)。现在,WebCache可以将已经缓存的资源返回到客

我的Java应用程序具有访问MongoDB集合的REST GET API(使用JAX-RS实现)。 我试图引入web缓存以减少响应时间(通过减少MongoDB端的文档读取)

我正在寻找为资源提供ETag()的标准方法(资源来自MongoDB集合中的文档),这样每当文档更新时,MongoDB集合中的ETag都会自动更新

现在,我可以用MongoDB文档中的ETag验证HTTP请求中的ETag(“如果不匹配”),如果两者相同,则返回304(未修改)。现在,WebCache可以将已经缓存的资源返回到客户端,从而提高响应时间

在谷歌搜索时,我有以下两种选择:

  • hascode()作为ETag:从MongoDB获取文档并填充Java 对象,然后计算用作ETag的hashCode()。但我 希望避免此开销(完整文档读取+哈希代码计算)

  • 上次修改日期为ETag:将新字段“上次修改”添加到mongoDB 收集 这种机制更适合于“最后修改的”头(HTTP) 答复)。看来,日期在这里被误用了。我得走了 修改现有文档以插入新字段(UpdateTime)。再一次, HTML日期的精度为秒,mongoDB日期的精度为毫秒


  • 请建议在MongoDB中提供ETag的最标准方法。

    在将对象持久化到MongoDB中之前,我正在进行哈希代码计算,并将其存储在字段
    ETag

    收到请求时,我可以查找
    {“\u id”:请求的\u id,“etag”:{$ne:RECEIVED\u etag}

    如果没有返回任何文档,您可能仍然需要确定文档
    {“\u id”:REQUESTED\u id}
    是否存在(我有,但在您的情况下,WebCache可能会处理此问题并返回404,否则返回304)


    如果它确实返回文档,只需使用其
    etag
    属性填写
    etag
    标题,并可能将其从返回的正文中删除。

    如何缓存查询?一个查询可以返回多个文档。