【问题标题】:Parse.com: query on an array field not working with a big number of valuesParse.com:查询不使用大量值的数组字段
【发布时间】:2015-12-07 20:54:25
【问题描述】:

我使用 Parse.com Core 和 Cloud Code 来存储数据并为移动应用程序执行一些操作。我对数组字段的查询有疑问,即使我确定它应该返回,有时也不会返回任何内容。

我将大量电话号码存储在一个数组字段中,以跟踪用户的匹配联系人。 这个字段叫做phoneContacts,看起来像这样(只有数字,这只是一个例子):

["+33W30VXXX0V","+33W30VXX843","+33W30VZVZVZ","+33W34W3X0Y4","+33W34W386Y0", ...]

我在 Cloud Code 中有一个函数,它应该为给定的电话号码获取匹配的行。这是我的查询:

var phoneNumber = request.params.phoneNumber;
var queryPhone = new Parse.Query('UserData');
queryPhone.equalTo('phoneContacts', phoneNumber); // phoneNumber is passed as a string param, i.e. "+33W30VXX843"

queryPhone.include('user');

var usersToNotify = [];
return queryPhone.each(function(userData) {
  var user = userData.get('user');
  usersToNotify.push(user.get('username'));
})
.then(function() {
  return usersToNotify;
});

我使用包含 2 个或 3 个电话号码的数组测试了我的查询,它运行良好并返回了预期的行。但是后来我尝试了一个在该 phoneContacts 字段中有大约 300 个电话号码的用户,即使我查询一个存在的值(在 Parse Data Browser 中出现一个过滤器),也没有返回任何内容。为了确保我什至取了一个存在于 2 行中的电话号码:一个有几个值,一个有很多值,并且只返回有几个值的行。

我已仔细阅读 Parse 文档,尤其是有关 queriesfield limits 的内容,但它似乎对数组字段的值数量没有限制,并且没有任何内容表明查询可能不起作用有很多价值。

谁能指出我正确的方向?我应该以不同的方式设计我的 Parse 类以避免在数组字段中有这么多值吗?还是查询有问题?

【问题讨论】:

    标签: arrays parse-platform parse-cloud-code nosql


    【解决方案1】:

    您需要使用 PFRelation 或某种中间表。您不应该使用数组来存储 300 个电话号码,您的查询会变得非常慢。

    PFRelations:

    https://parse.com/docs/osx/api/Classes/PFRelation.html http://blog.parse.com/learn/engineering/new-many-to-many/

    【讨论】:

    • 我明白了...所以实际上数组中的大量数据无法正常工作是正常的吗?因为我没有错误,而且查询也不慢。它只是没有返回它应该返回的内容。
    • 哦,那么您的查询很可能不正确。我只希望它在处理大量数据时会很慢。
    • 查看 PFQuery 的文档,您不应该使用“equalTo”作为数组成员。我认为你想使用“包含”。
    • 但是当有少量值时查询有效......所以它看起来是正确的。此外,文档实际上建议使用equalTo 来查询数组字段(不是针对数组的字段,在这种情况下确实是containedInparse.com/docs/js/guide#queries-queries-on-array-values
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多