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
相关产品推荐
相关产品推荐

