Mongoose findOne返回所有子文档

Mongoose findOne返回所有子文档,mongoose,subdocument,Mongoose,Subdocument,我尝试从集合中仅检索一个子文档。但它是所有的子文档,甚至是那些与过滤器不匹配的子文档 LevelXP.findOne({ “公会”:“715192953118654467”, 'users.user':“687893451534106669” },(错误,结果)=>{ 如果(错误)抛出错误; console.log(result.users) } })您可能需要使用位置操作符$()。 将查询投影为只返回匹配的子文档 因此,在您的情况下,您可以这样做: LevelXP.findOne({

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

LevelXP.findOne({
“公会”:“715192953118654467”,
'users.user':“687893451534106669”
},(错误,结果)=>{
如果(错误)抛出错误;
console.log(result.users)
}

})
您可能需要使用位置操作符
$
()。 将查询投影为只返回匹配的子文档

因此,在您的情况下,您可以这样做:

LevelXP.findOne({
            'guild':"715192953118654467",
            'users.user': "687893451534106669"
           },
           "users.$",
          (err,result)=>{
            console.log( result );
});
或者,语法的变体(
成对的
),如下所示:

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

谢谢,效果很好。但是当我使用.find而不是findOne时,它返回未定义的。你知道为什么吗?@RohanKumar因为find游标和findOne实际上返回一个获取的文档。你为什么需要使用find?