неизвестный оператор "0" при выполнении "$ elemMatch" в .find () - PullRequest
0 голосов
/ 08 января 2019

Выпуск

У меня есть сервер pouchdb-express, который я использую для некоторых тестов базы данных CouchDB.

У меня есть следующая база данных с таким элементом:

{
    _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, $ существует, $ ne, $ in, $ nin, $ size, $ mod, $ regex, $ elemMatch, $ type, $ allMatch или $ all ', название: 'bad_request', статус: 400, сообщение: 'неизвестный оператор "0" - должен быть одним из $ eq, $ lte, $ lt, $ gt, $ gte, $ существует, $ 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 Server

Вот мой пакет. 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 голосов
/ 10 января 2019

Я возился с этим и обнаружил, что для таких записей, как:

{
  "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" } } }

Я подозреваю, что "pouchdb-find" версия $elemMatch может обрабатывать только простые массивы, но не массивы объектов.

Похоже, PR требуется: - (

...