隐藏用户y 2024-07-26 12:55 采纳率: 64.4%
浏览 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日