【问题标题】:Mongoose findOne Returning all sub documentsMongoose findOne 返回所有子文档
【发布时间】:2020-11-12 09:04:00
【问题描述】:

我尝试从集合中仅检索一个子文档。但它是所有子文档,即使是那些不匹配过滤器的。

LevelXP.findOne({
            'guild':"715192953118654467",
            'users.user': "687893451534106669"
        },(err,result)=>{
            if(err) throw err;
            console.log(result.users)
          }
})

但是当我使用上面的代码时,它会返回所有子文档,而我应该只返回 1。 请帮忙。

【问题讨论】:

    标签: mongoose subdocument


    【解决方案1】:

    您可能想要使用位置运算符$ (reference link here)。 使您的查询投影只返回匹配的子文档

    所以在你的情况下,你可以这样做:

    LevelXP.findOne({
                'guild':"715192953118654467",
                'users.user': "687893451534106669"
               },
               "users.$",
              (err,result)=>{
                console.log( result );
    });
    

    或者,语法的变体 (paired),如下所示:

    LevelXP.findOne({
                'guild':"715192953118654467",
                'users.user': "687893451534106669"
               },
               {"users.$":1},
               (err,result)=>{
                console.log( result );
    });
    

    【讨论】:

    • 感谢它运行良好。但是当我使用 .find 而不是 findOne 时,它​​返回未定义。你知道为什么吗?
    • @RohanKumar 因为找到一个游标并且 findOne 实际上返回一个获取的文档。有什么理由需要使用 find?
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 2021-02-17
    • 2020-07-03
    • 1970-01-01
    • 2021-10-03
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多