Sails.js 如何使用sails filemaker查找一系列记录?

Sails.js 如何使用sails filemaker查找一系列记录?,sails.js,filemaker,Sails.js,Filemaker,我在使用sails filemaker的查找条件或where条件时遇到问题。根据我在sails文档中阅读的内容,我使用的是正确的标准。我正在使用的解决方法是不使用查找或where条件,并在查找后删除记录。非常小的唱片集也可以,但它并不优雅 var staffCriteriaFind = {roleId:[1,2]} ; var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ; Staff.find().where().exec(functi

我在使用sails filemaker的查找条件或where条件时遇到问题。根据我在sails文档中阅读的内容,我使用的是正确的标准。我正在使用的解决方法是不使用查找或where条件,并在查找后删除记录。非常小的唱片集也可以,但它并不优雅

var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find().where().exec(function(error,staff){
    /* remove staff members who are not account managers or artists */
    for ( index = staff.length-1; index > 0; index--) {
        var staffMember = staff[index];
        if ( staffCriteriaFind.roleId.indexOf( staffMember.roleId ) == -1 ) {
            staff.splice([index],1) ;
        }
    }
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});
员工模式是

/**
* Staff.js
*
* @description :: Staff employed by the business
* @docs        :: http://sailsjs.org/#!documentation/models
*/

module.exports = {

    connection: 'filemaker',
    tableName: 'staff-list-api-layout',

    autoPK:false ,
    autoCreatedAt: false ,
    autoUpdatedAt: false ,

  attributes: {
        id: {
            columnName: 'staff_id_',
            type: 'integer',
            primaryKey: true,
            unique:true
        } , 
        role:{
            columnName:'staff_role::role',
            type: 'string'
        },
        timesheetSort:{
            columnName:'staff_role::timesheet_sort',
            type:'string'
        },
        roleId:{
            columnName: 'role_id',
            type: 'integer',
            foreignKey: true
        },
        name:{
            columnName:'full_name',
            type: 'string'
        },
        createdAt:{
            type:'date'
        },
        updatedAt:{
            type:'date'
        }
  }

};
如果我使用

var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find(staffCriteriaFind).where().exec(function(error,staff){
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});
var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find().where(staffCriteriaWhere).exec(function(error,staff){
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});
我得到roleId=1的所有员工,roleId=2的员工都没有

如果我使用

var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find(staffCriteriaFind).where().exec(function(error,staff){
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});
var staffCriteriaFind = {roleId:[1,2]} ;
var staffCriteriaWhere = {or:[{roleID:1},{roleId:2}]} ;

Staff.find().where(staffCriteriaWhere).exec(function(error,staff){
    result.staff = staff ;
    return res.send(responseCode, result ) ;    
});
我根本没有员工记录


使用findCriteria或whereCriteria与sails filemaker的正确方法是什么,其中需要跨一系列值进行or搜索?

托德·盖斯特(Todd Geist)是最好的提问者,但我可以试着猜测

您的Staff.find可能使用FileMaker查找功能,因此一次只能查找一个参数。尝试使用{roleId:[2,1]},您可能会得到所有roleId=1

问题是,我在sales filemaker中的任何位置都找不到find()。我认为您正在查看newFindRequest(fmLayout,options.where),其中它是一个参数,而不是方法


试试staff.find(staffCriteriaWhere),这可能行得通

托德·盖斯特(Todd Geist)是最好的提问者,但我可以试着猜测

您的Staff.find可能使用FileMaker查找功能,因此一次只能查找一个参数。尝试使用{roleId:[2,1]},您可能会得到所有roleId=1

问题是,我在sales filemaker中的任何位置都找不到find()。我认为您正在查看newFindRequest(fmLayout,options.where),其中它是一个参数,而不是方法


试试staff.find(staffCriteriaWhere),这可能会起作用,我的坏,其中是sails方法,而不是sales filemaker

我想你应该试试这个:

Staff.find().where({roleId:1 },{roleId:2 })


我的坏,其中是sails方法,而不是销售文件制造商

我想你应该试试这个:

Staff.find().where({roleId:1 },{roleId:2 })


最后,我使用了一个filemaker脚本,将参数传递给该脚本,然后提取roleId以在filemaker中执行查找

var staffCriteria = {
                          'staff_id_' : '>0',
                          '-script' : 'find-staff-api-script',
                          '-script.param' : '{roleId:[1,2]}'
                    };
                    Staff.find(staffCriteria).where().exec(function(error,staff){

                        if ( error ) {
                            result.error = error ;
                            result.staffCriteria = staffCriteria ;
                        }
                        result.staff = staff ;
                        return res.send(responseCode, result ) ;    
                    });

有关更多示例,请参见。

我最终使用了一个filemaker脚本,将参数传递给该脚本,然后提取roleId以在filemaker中执行查找

var staffCriteria = {
                          'staff_id_' : '>0',
                          '-script' : 'find-staff-api-script',
                          '-script.param' : '{roleId:[1,2]}'
                    };
                    Staff.find(staffCriteria).where().exec(function(error,staff){

                        if ( error ) {
                            result.error = error ;
                            result.staffCriteria = staffCriteria ;
                        }
                        result.staff = staff ;
                        return res.send(responseCode, result ) ;    
                    });

有关更多示例,请参阅。

经过多次尝试,我发现您可以在find函数中使用Filemakers范围术语“…”

staff.find({a_StaffID:'1…12',position:'100…400'})
.then('对返回的数据执行任何需要执行的操作')

.catch('do any you need to do any error')
经过多次尝试,我发现您可以在find函数中使用Filemakers范围术语“…”

staff.find({a_StaffID:'1…12',position:'100…400'})
.then('对返回的数据执行任何需要执行的操作')

.catch('处理任何错误都可以')
谢谢Nicolai。这不起作用,但我很欣赏你的洞察力。谢谢尼科莱。这失败了,但我感谢你的洞察力。staff.find(staffCriteriaWhere)失败了。我最终使用了一个script.staff.find(staffCriteriaWhere)失败。我最终使用了一个脚本。