MongoDB查找然后查询嵌套文档

MongoDB查找然后查询嵌套文档,mongodb,mongoose,Mongodb,Mongoose,我正在尝试创建一个“like”路由,通过id查找用户,然后在用户内部查询。发布对象id,到目前为止,我尝试了以下方法: User.find({ "_id": logged_user, "posts_id": { $elemMatch: req.body.id } }, (err, data) => { if (err) { res.json(err) } console.log(data); }) 模式:

我正在尝试创建一个“like”路由,通过id查找用户,然后在
用户内部查询。发布对象id,到目前为止,我尝试了以下方法:

User.find({
    "_id": logged_user,
    "posts_id": {
        $elemMatch: req.body.id
    }
}, (err, data) => {
    if (err) {
        res.json(err)
    }
    console.log(data);
})
模式:

 username: String,
 posts:[{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
 }]

它返回一个空数组“[]”,如果它存在,我如何返回true或false?

您使用的$elemMatch是错误的。它需要一个对象。这样做:

User.find({"_id":logged_user,"posts":{$elemMatch: {$eq : req.body.id}}},(err,data)=>{ 

if(err){
res.json(err)
}
console.log(data);
)

只需检查数组的长度,并相应地发送true或false。问题是,即使文档内部有匹配的id,它也会返回空。find({“\u id”:logged\u user,“posts”:{$elemMatch:req.body.id},(err,data)=>{我认为您的字段名是posts,您正在使用posts\u idI尝试返回$elemMatch需要一个对象,然后我尝试了“posts”:{$elemMatch:{“\u id”:req.body.id‌}} 和stills return emptyit与$eq一起工作谢谢!欢迎:)$eq用于检查对象是否相等。您可以使用更多运算符,如$gt、$lt。有关更多信息,请阅读文档:@BrunoHenrique或更详细的说明:
$elemMatch
,此处根本不需要此运算符。仅当匹配“多个条件”时才需要使用此运算符对于数组元素。您只需要在这里发布
.find({“\u id”:logged\u user,“posts”:req.body.id},
,因为您对数组元素只有一个标准。因此
$elemMatch
完全没有必要,而且令人遗憾的是被误解了。但实际上,文档以及许多现有的“正确”标准都解释了这一点答案在这里。