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

如何在Mongoose中编写查询,实现user字段值等于to字段值的条件?

在Mongoose中查询user字段等于to字段的文档

嘿,要实现这个需求,你得注意普通的键值对查询是行不通的——因为普通查询是拿字段和固定值比较,而我们要的是同一个文档里两个字段的对等匹配。这里有两种简单直接的方法:

方法一:使用find配合$expr操作符

MongoDB的$expr操作符允许你在查询条件里使用聚合表达式,刚好能满足字段间比较的需求。你可以直接在find方法里这么写:

// 假设你的模型名叫Message
Message.find({
  $expr: { $eq: ['$user', '$to'] }
})
.then(matchingDocs => {
  console.log('符合条件的文档:', matchingDocs);
})
.catch(err => {
  console.error('查询出错:', err);
});

这里$eq是聚合里的相等比较操作符,$user和$to前面的$符号用来指代文档里对应的字段名,你的示例里这两个字段都是ObjectId类型,$eq可以直接正确比较它们。

方法二:使用聚合管道的$match阶段

如果你后续还要做其他聚合操作,也可以用聚合管道来实现这个查询:

Message.aggregate([
  {
    $match: {
      $expr: { $eq: ['$user', '$to'] }
    }
  }
  // 这里可以继续添加其他聚合阶段,比如$project、$sort等
])
.then(results => {
  console.log('查询结果:', results);
})
.catch(err => {
  console.error('聚合查询出错:', err);
});

这个方法的核心逻辑和第一种是一样的,只是把条件放在了聚合管道的$match阶段里,适合需要多步骤数据处理的场景。

内容的提问来源于stack exchange,提问作者silvia zulinka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:54:13