MongoDB中如何用find设置双限制条件,精准筛选目标文档?
MongoDB 查询:筛选含AC的文档并排除特定条目
问题原因
你提供的示例文档中没有DC字段,所以原查询里的DC: {$not: {$elemMatch: {DC: 'text'}}}条件对所有文档都成立(不存在DC字段的文档会自动满足$not的判断),导致返回全部3个含AC的文档。
解决方案
根据你的实际需求,分两种场景处理:
场景1:目标排除文档存在DC字段且满足特定条件
如果要排除的文档(AC 1)确实包含DC字段(比如是数组结构),例如:
{ _id: ObjectId('671feecf55501ae50186b01e'), Name: 'AC 1', Place: 'Floor', DC: [{DC: 'text'}] }
使用$elemMatch匹配数组内的条件,正确查询语句:
db.test.find({ "Name": {"$regex": "AC"}, "DC": {$not: {$elemMatch: {DC: 'text'}}} })
如果DC是单个字段而非数组,无需$elemMatch,直接用不等于判断:
db.test.find({ "Name": {"$regex": "AC"}, "DC": {$ne: 'text'} })
场景2:实际需通过Place字段排除目标文档
从你给出的示例文档看,所有文档只有Place字段,若要排除Place: 'Floor'的AC 1文档,直接针对Place字段过滤:
db.test.find({ "Name": {"$regex": "AC"}, "Place": {$ne: 'Floor'} })
执行后会返回AC 2和AC 3两个文档,完全符合需求。
额外:仅限制返回数量(随机取2个)
如果不需要排除特定文档,只是想返回任意2个含AC的文档,可使用limit()方法:
db.test.find({"Name": {"$regex": "AC"}}).limit(2)
内容的提问来源于stack exchange,提问作者Marie
相关产品推荐
相关产品推荐

