我在Couchbase写了一个地理空间视图:
function (doc, meta) {
if(doc.type == 'Bar') {
if(doc.position) {
emit(
{
type: "Point",
coordinates: [doc.position.latitude, doc.position.longitude]
}, doc.companyID);
}
}
}
然后我尝试通过边界框获取它们。 Couchbase正确返回此框中的对象。我希望将companyID作为值发出,并将其与另一个String进行比较,以确定是否允许该请求。
问题是我在unicode中得到了这样的值:
u'''CM-dummycompany'''
我从另一个cbobject得到的比较字符串是这样的:
u'CM-dummycompany'
当我比较这些时它也失败了。 那么任何想法如何比较正确的方法?
我使用==
和is
进行了尝试。我也尝试将其转换为字符串然后进行比较,但这显然失败了,因为我有像äöü
这样的不合格字符
或者更好的问题,为什么双引号被添加到发射值?
答案 0 :(得分:1)
好的,我在Couchbase问题Tracker中找到了解决方案:
Spatial views return value is double encoded
所以对于每个也面临这个问题的人: 问题是,在空间视图中,值会被双重编码。这意味着如果你返回一个数字,它就变成了一个字符串。并且字符串变为带有转义引号的字符串。
实际上他们说它已经在3.0.1中修复了,但我已经更新了,问题仍然存在。
我的解决方法只是通过re
删除引号:
value = re.sub('"','',value)
答案 1 :(得分:0)
请注意,在此发布中,Couchbase中的地理空间视图被认为是实验性的,而非生产就绪。官方支持计划至少在接下来的两个主要版本中发布。