首页 > 解决方案 > 使用nodejs检查存储在mongodb中的数组中某个值的数量

问题描述

我有一个问题,因为我试图检查某个值在存储在 MongoDB 中的数组中是否可用超过 1 次。我使用的渲染模板是 EJS,因此通过数组的循环当前正在工作,但现在我正试图让它检查项目“Bandage”的数量,但我不知道如何让它工作。当您尝试删除某个项目时,该功能会被触发,因此它必须检查您拥有该特定项目的数量,然后对其进行处理。user_items 存储在存储在 MongoDb 中的数组中,<% %> + "" 用于 EJS 模板,因为它是一堆字符串,所以必须用 "" 写下来。

这是我到目前为止在 EJS 页面上尝试做的事情:

<script>
const user_items = ["<%= user.items%>"]



//Checking if item(s) exist and delete them for the browser.


function  deleteitembandage(user_items){
const count = {}
const result = []

user_items.forEach(user_item => {
    if (count[user_item]) {
       count[user_item] +=1
       
     if ("Bandage" > 1) {
     alert('You have more then 2 Bandages')
}

       return
    }
    count[user_item] = 1
})

for (let prop in count){
    if (count[prop] >=2){
        result.push(prop)
    }
}

console.log(count)
return result;

}

deleteitembandage(user_items)


//Event listener delete button for bandage
document.getElementById('inventorydeletebandage').addEventListener('click', deleteitembandage)


</script>

但是,这会给我错误:未捕获的 TypeError:user_items.forEach 不是 HTMLButtonElement.deleteitembandage (inventory:105) 处的函数。

这样做的方法是什么?

标签: javascriptarraysmongodbejs

解决方案


使用 array.filter 创建一个仅包含“Bandage”项目的数组。然后检查该数组的长度。确保字符串 Bandage 与数组中的内容完全相同(大写/小写)。

const bandageCount = user_items.filter(item => item === "Bandage").length

推荐阅读