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

