首页 > 解决方案 > NoSQL 中如何实现不同查询的抽象视图

问题描述

我正在使用 Google Data-Store 开发一个系统,其中有一个 Kind - Posts 并且有 2 个属性

1. message (string) 
2. hashtags (list) 

我想用数字查询不同的主题标签。例如说帖子是

  {
    {
      "message":"msg1",
      "tags":["abc","cde","efr"]
    },
    {
      "message":"msg2",
      "tags":["abc,"efgh","efk"]
    },
    {
      "message":"msg3",
      "tags":["abc,"efgh","efr"]
    }
  }

输出应该是

{
  "abc":3
  "cde":1
  "efk":1
  "efgh":2
  "efr":2
}

但是在 NoSQL 实现数据存储中我不能直接查询这个。为了查询,我必须加载所有消息并找到不同的查询。这将是一个耗时的事件。

但是我看到了一个独特的函数db.collection.distinct()我认为它可能优化了这个问题。如果必须在任何 NoSQL 上完成,那么最佳解决方案可能是什么?

标签: sqlmongodbnosqlgoogle-cloud-datastoredatastore

解决方案


不幸的是,带有“distinct on”的投影查询只会返回每个不同值的单个结果(https://cloud.google.com/datastore/docs/concepts/queries#projection_queries)。它不会提供每个不同值的计数。您需要自己进行计数,但您可以使用投影查询通过仅返回标签值而不是完整实体来节省成本。


推荐阅读