我有一个用于测试CouchDB数据库的pouchdb-express服务器。
我有以下数据库,其中包含这样的项目:
{
_id: "12345",
email: 'u0@email.com',
companies: [{ id: 'company', uid: 'u0' }]
}
然后我运行以下命令,该命令在我的API上运行时会命中CouchDB数据库,但在PouchDB Express服务器上尝试该命令时将不起作用。
.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', 名称:“ 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"}]}
]
}
})
我也尝试过像test suite一样$eq
,但仍然没有骰子。
有人知道为什么会这样吗?
这是我的package.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",
答案 0 :(得分: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 } } }
,而在此“复合(?)”选择器中,忽略不匹配,并返回所有行! ...
{ selector: 'grades': { '$elemMatch': { 'score': 14 } } }
...这枚炸弹与您指示的错误有关:
{ selector: 'grades': { '$elemMatch': { "grade": "B" } } }
我怀疑$elemMatch
的“ pouchdb查找”版本只能处理简单的数组,而不能处理对象数组。
似乎需要PR:-(