问题
我有一个pouchdb express服务器,用于CouchDB数据库的一些测试。
我有下面的数据库,里面有这样一个项目:
{
_id: "12345",
email: 'u0@email.com',
companies: [{ id: 'company', uid: 'u0' }]
}
然后,我运行以下命令,该命令适用于我的API访问CouchDB数据库,但当我在PouchDBExpress服务器上尝试时不起作用。
.find({selector: { "companies": { "$elemMatch": {id: "company", uid: "u0"} } }})
我得到以下错误:
{错误:'bad_request',原因:'未知运算符"0"-应为$eq、$lte、$lt、$gt、$gte、$exists、$ne、$in、$nin、$size、$mod、$regex、$elemMatch、$type、$allMatch或$all之一',name:'bad_request',状态:400,消息:'未知运算符"0"-应为$eq、$lte、$lt、$gt、$gte、$exists、$ne、$in、$nin、$size、$mod、$regex、$elemMatch、$type、$allMatch或$all之一'}
在以下查询中,我也得到了同样的错误:
.find({
limit:9999999,
selector:{
$or: [
{$and: [{type:"something"},{uid:"u0"}] },
{$and: [{type:"document"}]}
]
}
})
我还尝试过在没有骰子的情况下执行$eq
,几乎与测试套件完全一样。
有人知道为什么会发生这种事吗?
信息
- 环境:Node.JS
- 服务器:PouchDB服务器
这是我的包.json
"pouchdb-find": "^6.4.3", // tried 7.0.0 and still have the issue
"pouchdb-node": "^6.4.3",
"pouchdb-server": "^4.1.0",
我对此进行了修补,并发现对于像这样的记录
{
"borough": "Brooklyn",
"cuisine": "American ",
"marks": [50, 60, 45, 43],
"grades": [
{
"grade": "A",
"score": 5
},
{
"grade": "A",
"score": 7
},
{
"grade": "A",
"score": 12
},
{
"grade": "A",
"score": 12
}
],
"name": "Riviera Caterer"
},
这个简单的选择器将返回正确的结果:
{ selector: { '$elemMatch': { '$gte': 0, '$lt': 30 } } }
并且,当这个"composite(?)"选择器时,忽略不匹配,并返回所有行。。。
{ selector: 'grades': { '$elemMatch': { 'score': 14 } } }
这枚炸弹带有你指示的错误:
{ selector: 'grades': { '$elemMatch': { "grade": "B" } } }
我怀疑$elemMatch
的"pouchdb find"版本只能处理简单的数组,而不能处理对象数组。
似乎需要PR:-(