在 .find() 中执行"$elemMatch"时未知运算符"0"



问题

我有一个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:-(

相关内容

  • 没有找到相关文章

最新更新