CouchDB查询无结果:如何筛选code为'hi'的文档?
解决CouchDB查询无结果的问题
我来帮你分析下问题所在,主要有两处需要修正:
1. $elemMatch使用场景错误
你的文档里linked是一个对象,但$elemMatch是专门用来匹配数组类型字段内元素的操作符,你应该针对linked.code这个数组字段做匹配,而非linked对象本身。
2. 大小写不匹配导致匹配失败
你的文档中linked.type的值是"XX",但查询语句里写的是"xx"——CouchDB的查询是严格区分大小写的,这也会让匹配条件失效。
正确的查询语句
你可以用两种方式实现需求:
方式一:直接匹配数组包含指定值
当目标字段是数组时,CouchDB支持直接用值匹配,会自动检查数组是否包含该值:
{ "selector": { "linked.type": "XX", "linked.code": "hi" } }
方式二:使用$in操作符(更明确的数组匹配)
如果想更清晰地表明是数组匹配逻辑,可以用$in:
{ "selector": { "linked.type": "XX", "linked.code": { "$in": ["hi"] } } }
原查询失效的原因
你原本的查询把$elemMatch用在了非数组的linked对象上,这个条件永远无法满足;再加上type值的大小写不匹配,双重问题导致了查询无结果。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

