mongodb 在云数据库中构建基于标签的数据库的最佳方法是什么?

b4lqfgs4  于 2023-03-07  发布在  Go
关注(0)|答案(1)|浏览(176)

我对我需要结构化文档的方式感到困惑,以便在需要时按标签有效地搜索/获取项目。
也就是说,每个文档的结构如下所示:

{
  name: "Delicious blackforest cake",
  tags: ["blackforest","birthday","designer"]
  ...
}
{
  name: "Red velvet cake",
  tags: ["party","anniversary","designer"]
  ...
}
...

总共有32个标签,我想根据标签来取蛋糕,这是我现在的结构,我觉得取蛋糕的效率很低。
例如,我想根据标签和蛋糕名称进行搜索
如果我搜索de,搜索建议应该是:

*设计师蛋糕/* This is based on a tag */

  • 美味的黑森林蛋糕/* This is based on an actual name */

据我所知,我想这在Firebase中很难实现。我应该选择MongoDB还是应该改变文档的结构?
我想根据我的上述需求有效地搜索和获取的建议。

f2uvfpb9

f2uvfpb91#

Firestore可以用于此用例,array-contains操作符可以用于查询tags数组包含特定值的文档。

await colRef.where("tags", "array-contains", "tag")

如果您的用例需要查找具有多个标记的文档,那么您可能必须使用map而不是array。
MongoDB有一个$all操作符可用于此操作,如下所示:

await collection.find({ tags: { $all: ["tag"] } })

对于全文搜索,您必须使用documentation中提到的搜索服务以获得最佳结果。(据我所知使用Apache Lucene),它只能在您将数据库托管在Atlas上时使用,否则您将不得不依赖$text运算符。Firestore Algolia Extension应该为您完成大部分工作,并让您使用Algolia的所有全文搜索功能。
此外,如果您将Algolia与Firestore一起使用,则可以获得对filtering by tags更好的支持,这样您就不必使用map来代替前面提到的array。

相关问题