分析服务器上的查询AND运算符

Parse query AND operator on the server

本文关键字:查询 AND 运算符 服务器      更新时间:2023-09-26

我使用Parse发送推送通知,需要发送给订阅了两个频道的用户:一个主频道和至少一个辅助频道列表。尝试只使用一个查询,如Parse论坛中建议的,但没有成功:(

//query main channel
var query1 = new Parse.Query(Parse.Installation);
query1.equalTo('channels', main);
//query secondary channels
var query2 = new Parse.Query(Parse.Installation);
query2.containedIn('channels', secondaryList);
//desired result
ParseQuery mainQuery = ParseQuery.and(query1, query2);
Parse.Push.send({ 
              where: mainQuery,
              data: {
                alert: req.body.message,
                uri: req.body.url
             }
            }, {
              success: function() {
                console.log("Push was successful");
              },
              error: function(error) {
                console.error(error);
              }
            });

没有Query.and()这样的东西。通过限定单个查询来获得连词:

var justOneQuery = new Parse.Query(Parse.Installation);
justOneQuery.equalTo('channels', main);
justOneQuery.containedIn('channels', secondaryList);
Parse.Push.send({ 
          where: justOneQuery,
          // ...

由于两个测试都是关于channels列(可能是一个数组)的内容,因此可以用一个条件来限定单个查询:

var main = "foo";
var secondaryList = ["bar", "baz"];
var singleList = secondaryList.concat(main);
// this one constraint is exactly the same as the other two
justOneQuery.containedIn('channels', singleList);
// or you could do the same thing with three equalTo
justOneQuery.equalTo('channels', "foo");
justOneQuery.equalTo('channels', "bar");
justOneQuery.equalTo('channels', "baz");

我建议您按照上面的方式进行查询,使用一些您知道在数据中的硬编码变量。一旦知道了查询的工作原理,就可以集中精力确保正确调用函数。