Skip to content

$or inside a where clause always expects the input to be an array #3767

@grimurd

Description

@grimurd

According to the documentation creating an or in a where should be as simple as doing this:

models.find({
  rank: {
    $or: {
      $lt: 100,
      $eq: null
    }
  }
})

However doing this doesn't work, but it works when it is wrapped in an array as such:

models.find({
  rank: {
    $or: [{
      $lt: 100
    }, {
      $eq: null
    }]
  }
})

It works just fine.

This is the error that is produced with the first example:

TypeError: undefined is not a function
   at Object.module.exports.QueryGenerator.whereItemQuery (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1753:45)
   at /home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1609:27
   at /home/grimurd/Documents/Repos/WiFi/node_modules/lodash/index.js:3159:15
   at baseForOwn (/home/grimurd/Documents/Repos/WiFi/node_modules/lodash/index.js:2089:14)
   at Function.<anonymous> (/home/grimurd/Documents/Repos/WiFi/node_modules/lodash/index.js:3438:16)
   at Object.module.exports.QueryGenerator.whereItemsQuery (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1608:11)
   at Object.module.exports.QueryGenerator.getWhereConditions (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1980:21)
   at Object.module.exports.QueryGenerator.selectQuery (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1287:30)
   at module.exports.QueryInterface.select (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/lib/query-interface.js:685:27)
   at null.<anonymous> (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/lib/model.js:743:34)
   at tryCatcher (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/node_modules/bluebird/js/main/util.js:24:31)
   at Promise._settlePromiseFromHandler (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:454:31)
   at Promise._settlePromiseAt (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:530:18)
   at Async._drainQueue (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/node_modules/bluebird/js/main/async.js:182:12)
   at Async._drainQueues (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/node_modules/bluebird/js/main/async.js:187:10)
   at Immediate.Async.drainQueues [as _onImmediate] (/home/grimurd/Documents/Repos/WiFi/node_modules/sequelize/node_modules/bluebird/js/main/async.js:15:14) 

See my original question on stackoverflow here

Metadata

Metadata

Assignees

Labels

P1: importantFor issues and PRs.type: featureDEPRECATED: replace with the "feature" issue type

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions