假设我在数据库中的属性对象之一如下所示:
{
id: ObjectID(454379857349857349545345),
property_name: 'building 9',
address_street_1: 'mark street 2',
address_street_2: 'mark avenue',
address_city: 'o town',
address_zip: '687',
state: 'o state'
}
在创建新地址之前,我需要检查是否已经创建了相同/相似地址的属性。如果假设新数据的地址为:
property name: 9,
street 1: mark street 2,
street 2: mark ave,
city: O-town,
zip: 687,
state: O-state
最佳答案
我个人不会尝试匹配诸如“building 9”与“9”相同或任何其他组合之类的东西。它过于宽泛,容易在逻辑上出错,而且需要编写的逻辑太多。
如果您存储了该属性的“地理位置”,那么您实际上可以进行直接比较,即您没有添加具有基本相同位置数据的内容或“靠近”该位置的距离太小。您可以获得精确到 1 米的距离,因此通常在几平方米以内的任何东西都将是“否”,因为它们是同一个地方,或者至少要经过仔细审查。
因此,如果您的数据实际上看起来像:
{
_id: ObjectID(454379857349857349545345),
property_name: 'building 9',
address_street_1: 'mark street 2',
address_street_2: 'mark avenue',
address_city: 'o town',
address_zip: '687',
state: 'o state',
"location": {
"type": "Point",
"coordinates": [150.9482,-33.7764991]
}
}
然后你想通过它的位置数据检查一个新列表,那么你基本上会做一个 $nearSphere用 $minDistance 查询过滤掉任何太接近的东西:
db.collection.find({
"location": {
"$nearSphere": {
"$geometry": {
"type": "Point",
"coordinates": [150.9482,-33.7764991]
},
"$minDistance": 20
}
}
})
最小距离为 20 米且您通常不会期望在结果中找到任何内容。但是,如果您这样做了,那么这是对返回列表的快速检查,以查看这是否“看起来像”相同的地址,并且可以由“人”处理。
因此,使用 GPS 等具体的东西从位置读取并保存它,然后检查相同的地址就变成了一项简单的任务。
看Geospatial Queries and indexes获取更多信息。
只是认为这实际上是一个有用的搜索结果,所以这是您如何达到这一点的基本潜台词。
对于问题中“一般描述”的系统,您通常有一个负责属性(property) list (原文如此)的“代理人”,并且“所述代理人”将要进行的假设是非常合理的在建立新业务的过程中参观感兴趣的属性(property)。
因此我想到了两个基本点:
这个星球上(在合理的工作场景中)有谁没有随身携带能够确定其当前位置的手机?即使是手机信号塔信号强度三角测量也应该在合理的米半径范围内使这一点基本正确,但通常这些“小计算机”都具有 GPS 功能,并且还能够与记录其当前位置的应用程序进行交互。
这可能有异常(exception),或者只有“不懂技术的 super 销售人员”至少可以“指着 map ”(毕竟他们实际上以某种方式找到了这个地方)或自己解决通过从界面中选择 map 位置在办公室中。
考虑到这两个选项中的任何一个,用户(或助手)需要完全无能才能以某种方式从呈现的 map 中选择属性的位置。嘿,“谷歌”(无品牌意图)大多数时候仅根据键入地址的“文本”就可以正确使用。但我们在这里并不是要构建“Google”(品牌背书不是故意的),而只是一个可以完成这项工作的应用程序。
归根结底,如果人们真的不能“指点 map ”,或者无法使用口袋里的 GPS,那就让他们手动查找吧。并将其列为“设计约束”,直到支付 2 万美元的账单。
关于mongodb - 查找与家庭住址最接近的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32347404/
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
我已经在mountainlion上成功安装了rbenv和rubybuild。运行rbenvinstall1.9.3-p392结束于:校验和不匹配:ruby-1.9.3-p392.tar.gz(文件已损坏)预期f689a7b61379f83cbbed3c7077d83859,得到1cfc2ff433dbe80f8ff1a9dba2fd5636它正在下载的文件看起来没问题,如果我使用curl手动下载文件,我会得到同样不正确的校验和。有没有人遇到过这个?他们是如何解决的? 最佳答案 tl:博士;使用浏览器从http://ftp.rub
@raw_array[i]=~/[\W]/非常简单的正则表达式。当我用一些非拉丁字母(具体来说是俄语)尝试时,条件是错误的。我能用它做什么? 最佳答案 @raw_array[i]=~/[\p{L}]/使用西里尔字符进行测试。引用:http://www.regular-expressions.info/unicode.html#prop 关于ruby-正则表达式将非英文字母匹配为非单词字符,我们在StackOverflow上找到一个类似的问题: https://
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr