我有一个class Model 有7K的数据,查询时候在指定了 contains 判断的时候导致查询超时。奇怪的是在发生超时之前,下面的查询返回0 数据。应该有3条数据符合条件的。

这似乎是个性能方面的bug,一开始没有正确返回数据,后来干脆超时了

    var query = new AV.Query('Model');
    query.equalTo('series', AV.Object.createWithoutData('Series', req.params.id));
    query.contains('state', 'published');   // <-----去掉这个条件就可以了
    query.find().then(function (models) {           
       // 
    }, function (error) {
        // 异常处理
        if (err.code === 101) {
          res.render('lights/models', {
            title: '车型列表',
            models: []
          });
        } else {
            next();
        }
    });

APP ID: CP29pCHIdCmV1b0TUuPo00hF-gzGzoHsz

已解决。这是一个默认值导致的问题。
state字段是不存在的。新建的时候统一设置了“默认值”,所以导致条件查询返回0,或者超时。
改为下面的代码就可以了

    var queryNotExist = new AV.Query('Model');
    queryNotExist.equalTo('series', AV.Object.createWithoutData('Series', req.params.id));
    queryNotExist.doesNotExist('state');
    var queryPublished = new AV.Query('Model');
    queryPublished.equalTo('series', AV.Object.createWithoutData('Series', req.params.id));
    queryPublished.contains('state', 'published');
    var query = AV.Query.or(queryNotExist, queryPublished);
    query.find().then(function(){
        // works fine
    })
1 人赞了这个帖子.