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

MongoDB查询如何获取仅包含'black'标签的文档?

如何在MongoDB中查询仅包含指定标签的文档

你当前的查询tags: 'black'会匹配所有包含'black'标签的文档,不管数组里是否还有其他标签,因此会返回像['black', 'red']这类不符合预期的结果。

以下是两种可行的解决方案:


方式1:直接匹配整个数组

如果你的需求是tags数组恰好只有'black'这一个元素,直接将查询条件设为匹配整个数组即可:

const inventory = await Inventory.find({
  tags: ['black']
});

这种方式会严格匹配tags数组完全等于['black']的文档,数组的长度和元素必须完全一致。


方式2:灵活匹配(支持多相同标签场景)

如果允许tags数组包含多个black(比如['black', 'black']),但不能有其他标签,可以用以下两种写法:

限制数组长度为1且包含'black'

const inventory = await Inventory.find({
  $and: [
    { tags: 'black' },
    { tags: { $size: 1 } }
  ]
});

允许数组有多个'black'但无其他标签

const inventory = await Inventory.find({
  $expr: {
    $eq: [
      { $setIntersection: ['$tags', ['black']] },
      '$tags'
    ]
  }
});

修改后的完整代码示例

以方式1为例,修改后的路由代码如下:

const express = require('express');
const Inventory = require('../models/inventory');
const router = express.Router();

router.get('/inventory2', async (req, res) => {
  const inventory = await Inventory.find({
    tags: ['black']
  });
 
  res.send(inventory);
});

执行后就能得到你预期的仅包含tags: ['black']的文档,不会返回带有其他标签的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:23:07