首页 > 解决方案 > 按多参考字段过滤集合

问题描述

我试图在函数完成工作之前通过多引用字段过滤集合。

我使用了这个 wix 示例,但我不希望它过滤整个集合https://www.wix.com/corvid/example/filter-with-multiple-options

我是新手,可能做错了这是我设法弄清楚的


import wixData from 'wix-data';

const collectionName = 'Blog/Posts'
//const collectionName = wixData.query('Blog/Posts').contains("categories", ["O -Fitness"]);

const fieldToFilterByInCollection = 'hashtags';


$w.onReady(function () {

    setRepeatedItemsInRepeater()
    loadDataToRepeater()

    $w('#tags').onChange((event) => {
        const selectedTags = $w('#tags').value
        loadDataToRepeater(selectedTags)
    })
});

function loadDataToRepeater(selectedCategories = []) {

    let dataQuery = wixData.query(collectionName)//.contains("categories", ["O -Fitness"]);


    if (selectedCategories.length > 0) {
        dataQuery = dataQuery.hasAll(fieldToFilterByInCollection, selectedCategories)
    }

    dataQuery
        .find()
        .then(results => {
            const itemsReadyForRepeater = results.items
            $w('#Stories').data = itemsReadyForRepeater;

            const isRepeaterEmpty = itemsReadyForRepeater.length === 0

            if (isRepeaterEmpty) {
                $w('#noResultsFound').show()
            } else {
                $w('#noResultsFound').hide()
            }
        })
}

function setRepeatedItemsInRepeater() {
    $w('#Stories').onItemReady(($item, itemData) => {

        $item('#image').src = itemData.coverImage;
        $item('#title').text = itemData.title;
        if ($item("#title").text.length > 40){
        $item("#title").text =$item("#title").text.slice(0, 40) + '...' ;}
        $item('#excerpt').text = itemData.excerpt;
        if ($item('#excerpt').text.length > 100){
        $item('#excerpt').text =$item('#excerpt').text.slice(0, 100) + '...' ;}     



    })
}

这是我想添加的评论位


const collectionName = wixData.query('Blog/Posts').contains("categories", ["O -Fitness"]);

提前致谢

标签: velo

解决方案


您使用“hasAll”过滤多参考字段。'hasSome' 处理多引用,但 'hasAll' 不处理此字段类型。

您可以使用:

selectedCategories.map(category => {
   dataQuery = dataQuery.hasSome(fieldToFilterByInCollection, category)
})

这与 hasAll - hasSome(x) & hasSome(Y) = hasAll(x,y) 相同 - 但因为 'hasSome' 正在处理多引用,所以它会起作用:)


推荐阅读