javascript - 使用数组解析或查询

标签 javascript parse-platform parse-server

我正在尝试从一组查询创建一个 or 查询。我需要使用数组,因为查询量不固定,它取决于用户输入。

This is some sample code from parse.com to implement an or query.

var lotsOfWins = new Parse.Query("Player");
lotsOfWins.greaterThan("wins", 150);

var fewWins = new Parse.Query("Player");
fewWins.lessThan("wins", 5);

var mainQuery = Parse.Query.or(lotsOfWins, fewWins);
mainQuery.find()
  .then(function(results) {
    // results contains a list of players that either have won a lot of games or won only a few games.
  })
  .catch(function(error) {
    // There was an error.
  });

我想做的是

var orQueries = [];

使用Parse.Query对象填充for循环内的数组。然后我打电话

var userQuery = new Parse.Query.or(orQueries);

这会导致内部服务器错误:

"TypeError: A ParseQuery must be constructed with a ParseObject or class name.

如何解决此问题并使用数组初始化查询?

最佳答案

一个答案是使用 JS 来应用这样的参数......

// In older JS:
var orQueries = [lotsOfWins, fewWins];
var querySum = Parse.Query.or.apply(null, orQueries);

// >=ES6:
var orQueries = [lotsOfWins, fewWins];
var querySum = Parse.Query.or(...orQueries);

我不知道查询数组长度的上限,但您应该注意不要将其完全置于用户控制之下。

编辑 - 如果查询数量很少并且产生相当小的结果集(例如总共不到 1k?),您可以放弃 Query.or 并执行“or” “自己工作...

const _ = require('underscore');

function disjunctiveQuery(queries) {
    return Promise.all(queries).then(results => _.uniq(_.flatten(results), 'id'));
}

disjunctiveQuery([queryA, queryB, queryC, queryD]).then( ...

关于javascript - 使用数组解析或查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49132454/

相关文章:

javascript - 使用 jimp 为图像着色

Swift - 如何下载并显示帖子下的评论?

ios - 从解析本地数据存储检索信息

node.js - promise 失败后继续

javascript - 为类设置初始值

javascript - 在javascript中,只要名称与局部变量相同就可以访问全局变量吗?

javascript - ES6 返回包含两个数组中的值的对象

javascript - 推送到对象而不是数组

mongodb - mongodump - 文件名、目录名或卷标语法不正确

ios - 如何让 iOS 应用程序与我的 Parse Web 服务器通信?