隐藏用户y 2024-07-26 12:55 采纳率: 64.9%
浏览 2
已结题

moogoose多表查询相关问题

使用mongoose进行多表联查,为什么会报错

Article.find().populate('author', { password: 0, username: 1, nickname: 1, tag: 1 })
    .limit(1).exec().then((r) => {
        console.log(r);
        console.log('查询成功');
    })

img


但是下面代码就不会报错

Article.find().populate('author', { username: 1, nickname: 1, tag: 1 })
    .limit(1).exec().then((r) => {
        console.log(r);
        console.log('查询成功');
    })

  • 写回答

2条回答 默认 最新

  • 专家-司宇[在线] 2024-07-26 12:55
    关注

    引自免费微信小程序:皆我百晓生

    你遇到的问题是关于MongoDB查询投影(Projection)的。在你的查询中,你尝试混合使用包含(inclusion)和排除(exclusion)的方式来定义投影,这在MongoDB中是不允许的。MongoDB不允许在同一个查询中同时包含和排除字段。你需要选择一种方式,要么包含需要的字段,要么排除不需要的字段。

    在你的代码中,你尝试使用 { password: 0 } 来排除 password 字段,同时使用 { username: 1, nickname: 1, tag: 1 } 来包含其他字段。这是不允许的。你需要选择一种方式,例如只包含需要的字段:

    Article.find().populate('author', { username: 1, nickname: 1, tag: 1 })
        .limit(1).exec().then((r) => {
            console.log(r);
            console.log('查询成功');
        })
    

    在这个修正后的代码中,我们只包含了 usernamenicknametag 这三个字段,排除了其他所有字段。如果你需要包含更多的字段,只需在投影对象中添加对应的字段名即可。同样,如果你想排除某个字段,只需将该字段的值设为 0 即可。

    另外,关于图1和图2的内容是一样的,它们都是关于同一个问题的描述和堆栈跟踪信息。在解决这个问题时,主要的错误信息是 "Projection cannot have a mix of inclusion and exclusion",意味着你不能在同一个查询中同时使用包含和排除的方式定义投影。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月3日
  • 已采纳回答 7月26日
  • 创建了问题 7月26日

悬赏问题

  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?