在.find()

时间:2019-01-08 15:27:43

标签: couchdb pouchdb

问题

我有一个用于测试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,但仍然没有骰子。

有人知道为什么会这样吗?

信息

  • 环境:Node.JS
  • 服务器:PouchDB服务器

这是我的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",

1 个答案:

答案 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:-(

相关问题