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

Node中Mongoose查询如何在types条件中用$or匹配多值

解决Mongoose中types匹配多个值的问题

嘿,我来帮你搞定这个查询问题!你之前的写法出错是因为没正确使用MongoDB的查询操作符,咱们一步步来修正。

首先,你的需求是让types字段匹配"presenter"和"Presenter"这两个值,这里最简洁的方案是用$in操作符——它专门用来匹配字段值在指定数组中的文档,比$or更适合这种场景。

方案1:链式调用where + in方法

Contacts.find()
  .where("_id", id)
  .where("types").in(["presenter", "Presenter"])
  .exec(function(err, doc) {
    if (err) {
      // 错误处理
      console.error(err);
      return;
    }
    // 处理查询到的文档
    console.log(doc);
  });

方案2:直接在find中传入完整查询条件

如果你更喜欢简洁的对象写法,也可以直接把条件写在find的参数里:

Contacts.find({
  _id: id,
  types: { $in: ["presenter", "Presenter"] }
})
.exec(function(err, doc) {
  // 处理逻辑同上
});

如果你一定要用$or的话(虽然这里没必要)

要是你想尝试$or的正确用法,得把每个条件放在对象里组成数组,而不是像之前那样直接传参数。写法如下:

// 方式一:直接在find中用$or
Contacts.find({
  _id: id,
  $or: [
    { types: "presenter" },
    { types: "Presenter" }
  ]
})
.exec(function(err, doc) {
  // 处理逻辑
});

// 方式二:用Mongoose的or链式方法
Contacts.find()
  .where("_id", id)
  .or([{ types: "presenter" }, { types: "Presenter" }])
  .exec(function(err, doc) {
    // 处理逻辑
  });

额外小提示

如果你的types字段是字符串类型,上面的写法都是精确匹配大小写的。要是你想忽略大小写直接匹配(比如同时匹配"Presenter"、"presenter"、"PRESENTER"),可以用正则表达式:

Contacts.find()
  .where("_id", id)
  .where("types", /^presenter$/i) // i表示忽略大小写
  .exec(function(err, doc) {
    // 处理逻辑
  });

不过要注意,正则表达式可能会影响查询性能,如果数据量较大,建议给types字段加上合适的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:23:54