MongoDB查找然后查询嵌套文档
我正在尝试创建一个“like”路由,通过id查找用户,然后在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); }) 模式:
用户内部查询。发布对象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
完全没有必要,而且令人遗憾的是被误解了。但实际上,文档以及许多现有的“正确”标准都解释了这一点答案在这里。