Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

实现 MongoDB $or 操作符:多条件 OR 查询

本文详细介绍 MongoDB 中 $or 操作符的使用,用于执行逻辑 OR 查询:匹配满足 至少一个 条件的文档。

$or 语法

db.yourCollectionName.find({ 
  $or: [ 
    { "yourFieldName": yourValue1 }, 
    { "yourFieldName": yourValue2 } 
  ] 
}).pretty();

创建示例数据

> db.orOperatorDemo.insertOne({"StudentNames":["John","Carol","Sam"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6b80a6d78f205348bc61b") }
> db.orOperatorDemo.insertOne({"StudentNames":["Robert","Chris","David"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6b8266d78f205348bc61c") }
> db.orOperatorDemo.insertOne({"StudentNames":["John"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6b8346d78f205348bc61d") }

显示所有数据

> db.orOperatorDemo.find().pretty();
{ "_id" : ObjectId("5cd6b80a6d78f205348bc61b"), "StudentNames" : [ "John", "Carol", "Sam" ] }
{ "_id" : ObjectId("5cd6b8266d78f205348bc61c"), "StudentNames" : [ "Robert", "Chris", "David" ] }
{ "_id" : ObjectId("5cd6b8346d78f205348bc61d"), "StudentNames" : [ "John" ] }

查询:StudentNames 包含 "Carol" 或 "John"

> db.orOperatorDemo.find({ 
  $or: [ 
    { "StudentNames": "Carol" }, 
    { "StudentNames": "John" } 
  ] 
}).pretty();

结果

{ "_id" : ObjectId("5cd6b80a6d78f205348bc61b"), "StudentNames" : [ "John", "Carol", "Sam" ] }
{ "_id" : ObjectId("5cd6b8346d78f205348bc61d"), "StudentNames" : [ "John" ] }

$or 核心特性

  • 数组中的每个元素是一个完整的查询条件对象
  • 文档满足 任意一个 条件即匹配
  • 条件可以针对 同一字段 或 不同字段
  • 可嵌套在 $and、$nor、$not 中

不同字段的 $or 示例

// Name = "John" OR Age > 25
db.users.find({
  $or: [
    { "Name": "John" },
    { "Age": { $gt: 25 } }
  ]
});

$or vs $in 对比

场景推荐用法示例
同一字段,多个可选值$in{ status: { $in: ["A", "B", "C"] } }
不同字段,不同条件$or{ $or: [{name: "John"}, {age: {$gt: 30}}] }
同一字段,复杂条件组合$or{ $or: [{score: {$gt: 90}}, {grade: "A"}] }
数组字段,精确匹配元素$in 或 $all{ tags: { $in: ["mongodb"] } }

性能提示

  • $or 的每个子句最好都能使用索引
  • 避免过多子句(建议 < 10 个)
  • 可考虑重构 Schema 或使用 Text Search 替代复杂 $or