MongoDB数据建模:参考文档中的文本搜索模式
我正在做一个使用MongoDB的项目;我想听听你对我想实现的功能的看法。 在特定领域,有居住在“城市”的“用户”,他们在那里提供“服务”。 我创建了三个代表上述三个实体的集合: 用户集合具有与城市的一对一引用和与服务的一对多引用。 我想创建一个搜索函数,在用户集合和引用集合中搜索给定字符串。 因此,考虑到以下两个用户、两个城市和三个服务。。。 使用者 城市 服务MongoDB数据建模:参考文档中的文本搜索模式,mongodb,data-modeling,mongo-shell,Mongodb,Data Modeling,Mongo Shell,我正在做一个使用MongoDB的项目;我想听听你对我想实现的功能的看法。 在特定领域,有居住在“城市”的“用户”,他们在那里提供“服务”。 我创建了三个代表上述三个实体的集合: 用户集合具有与城市的一对一引用和与服务的一对多引用。 我想创建一个搜索函数,在用户集合和引用集合中搜索给定字符串。 因此,考虑到以下两个用户、两个城市和三个服务。。。 使用者 城市 服务 { _id:"s1", name: "Repair" } { _id:"s2", name: "Sel
{
_id:"s1",
name: "Repair"
}
{
_id:"s2",
name: "Sell"
}
{
_id:"s3",
name: "Buy"
}
…搜索单词“R”,结果应该是u1用户(由于“Rome”和“Repair”中的R)。
考虑到我不能进行连接,我正在考虑制作一个mongo shell脚本,该脚本向用户集合添加一个附加字段,其中包含所有可搜索的引用字符串。
如下例所示
{
_id:"u1",
name:"Jhon",
City: ObjectId("c1"),
Services: [
ObjectId("s1"),
ObjectId("s2")
],
"idx":{
city: "Rome",
services:["Repair","Sell"]
}
}
最后,问题。。。
你认为这是一个好的选择吗?你能提出一个替代的解决方案吗(或者分享一个关于这个的链接,我没有发现任何有用的东西)?
你将如何保持该领域的不断更新;例如,如果引用的城市名称或用户提供的服务发生变化,该怎么办?我认为您的模型是错误的。城市是如此静态,它们不应该是城市集合的引用,而只是一个原始列表。与关系数据库相比,这就是让Mongo变得卓越的方法。按照您的方式,最好使用关系数据库。你的服务可能也是这样。您应该了解如何对NoSQL建模,以及为什么要对它们进行不同的建模。概念是不同的。也可以考虑使用弹性搜索进行复杂的搜索。嗨,埃里克。我也认为我的模型是错误的,但我已经查看了mongodb文档,没有找到一些有用的资源来解释如何为这种搜索建模。如果我需要引用非静态的实体呢?。我将按照您的建议查看ElasticSearch。感谢您的评论为了评估您的模型,我们需要知道您通常会执行哪些类型的操作-哪些读取,哪些写入?我认为读取和写入的数量是平衡的;事实上,注册用户可以非常频繁地更改其城市和服务。同时,用户可以按城市或服务搜索其他用户。换句话说,我的问题是:如果出于任何原因,我必须在按引用文档中的字段搜索用户时,使用引用文档对用户集合进行建模,那么放置一个额外的字段公开所有可搜索字符串是否可以?如果是,如何保持该字段以透明的方式不断更新以适应变化?谢谢
{
_id:"s1",
name: "Repair"
}
{
_id:"s2",
name: "Sell"
}
{
_id:"s3",
name: "Buy"
}
{
_id:"u1",
name:"Jhon",
City: ObjectId("c1"),
Services: [
ObjectId("s1"),
ObjectId("s2")
],
"idx":{
city: "Rome",
services:["Repair","Sell"]
}
}