You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB如何判断元素在数组中存在?怎么编写排除指定ID的查询?

正确实现代码

你之前使用正则匹配的方案存在性能差、容易出现误匹配的问题,且不需要显式声明$and,MongoDB默认对多查询条件执行逻辑与判断,直接使用$ne运算符即可实现数组中不存在指定元素的筛选:

router.post('/fetchUsersForClient', async function (req, res) {
    /* Body
    {
        "client_id" : String
    }
    */
    try {
        const client_id = req.body.client_id;
        const users = await SampleUser.find({
            // 要求2:排除_id等于client_id的文档
            _id: { $ne: client_id },
            // 要求1:meta下所有数组均不包含client_id
            "meta.user_likes": { $ne: client_id },
            "meta.user_dislikes": { $ne: client_id },
            "meta.user_liked_by": { $ne: client_id },
            "meta.user_matches": { $ne: client_id }
        });
        res.json(users);
    } catch (error) {
        res.send({ message: error.message });
    }
});

说明

  1. 对数组字段使用$ne时,MongoDB会自动筛选出数组中没有任何元素等于指定值的文档,完全匹配你的需求。
  2. 如果你需要沿用原来的正则方案(不推荐),可以通过正则构造函数动态替换硬编码的1:
    const matchReg = new RegExp(client_id, 'i')
    
  3. 如果查询并发较高,可给上述查询涉及的字段创建索引,大幅提升查询性能。

内容的提问来源于stack exchange,提问作者Abhinav Agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 00:06:04