Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB数据建模:参考文档中的文本搜索模式_Mongodb_Data Modeling_Mongo Shell - Fatal编程技术网

MongoDB数据建模:参考文档中的文本搜索模式

MongoDB数据建模:参考文档中的文本搜索模式,mongodb,data-modeling,mongo-shell,Mongodb,Data Modeling,Mongo Shell,我正在做一个使用MongoDB的项目;我想听听你对我想实现的功能的看法。 在特定领域,有居住在“城市”的“用户”,他们在那里提供“服务”。 我创建了三个代表上述三个实体的集合: 用户集合具有与城市的一对一引用和与服务的一对多引用。 我想创建一个搜索函数,在用户集合和引用集合中搜索给定字符串。 因此,考虑到以下两个用户、两个城市和三个服务。。。 使用者 城市 服务 { _id:"s1", name: "Repair" } { _id:"s2", name: "Sel

我正在做一个使用MongoDB的项目;我想听听你对我想实现的功能的看法。 在特定领域,有居住在“城市”的“用户”,他们在那里提供“服务”。 我创建了三个代表上述三个实体的集合: 用户集合具有与城市的一对一引用和与服务的一对多引用。 我想创建一个搜索函数,在用户集合和引用集合中搜索给定字符串。 因此,考虑到以下两个用户、两个城市和三个服务。。。 使用者

城市

服务

{
    _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"]
    }
}